본문 바로가기

IT/알고리즘

코딩테스트 (11/21/19)

반응형

받은 코테 문제 + 풀이

 

1. 2차원 배열 반시계/시계

[2차원 배열]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

[출력 결과]

2

3

4

8

1

10

6

12

5

11

7

16

9

13

14

15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package linuxware1;
 
public class MainClass {
 
    public static void arrayTurn(int rowSize, int colSize, int[][] arr) {
        
        int row = 0;
        int col = 0;
        int currentValue, previousValue;
        //false = 반시계방향
        //true = 시계방향
        boolean rotationDirection = false;
        
        while(row < rowSize && col < colSize) {
            
            if(row + 1 >= rowSize || col + 1 >= colSize) break;
            
            if(!rotationDirection) {
                
                previousValue = arr[row][col + 1];
                
                // ↓ 
                for(int i = row; i < rowSize; i++) {
                    currentValue = arr[i][col];
                    arr[i][col] = previousValue;
                    previousValue = currentValue;
                }
                rowSize--;
                
                // →
                for(int i = col; i < colSize - 1; i++) {
                    currentValue = arr[rowSize][i + 1];
                    arr[rowSize][i + 1= previousValue;
                    previousValue = currentValue;
                }
                colSize--;
                
                // ↑ 
                for(int i = rowSize; i > row; i--) {
                    currentValue = arr[i - 1][colSize];
                    arr[i - 1][colSize] = previousValue;
                    previousValue = currentValue;
                }
                col++;
                
                // ← 
                for(int i = colSize - 1; i >= col; i--) {
                    currentValue = arr[row][i];
                    arr[row][i] = previousValue;
                    previousValue = currentValue;
                }
                row++;
            } else {
                previousValue = arr[row + 1][col];
                
                // →
                for(int i = col; i < colSize; i++) {
                    currentValue = arr[row][i];
                    arr[row][i] = previousValue;
                    previousValue = currentValue;
                }
                row++;
                
                // ↓
                for(int i = row; i < rowSize; i++) {
                    currentValue = arr[i][colSize - 1];
                    arr[i][colSize - 1= previousValue;
                    previousValue = currentValue;
                }
                colSize--;
                
                // ← 
                for(int i = colSize - 1; i >= col; i--) {
                    currentValue = arr[rowSize - 1][i];
                    arr[rowSize - 1][i] = previousValue;
                    previousValue = currentValue;
                }
                rowSize --;
                
                // ↑
                for(int i = rowSize; i > row; i--) {
                    currentValue = arr[i - 1][col];
                    arr[i - 1][col] = previousValue;
                    previousValue = currentValue;
                }
                col++;
            }
            rotationDirection = !rotationDirection;
        }
        
        //print
        for(int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr.length;  j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
    
    public static void main(String[] args) {
        int[][] arr = 
            {{1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,16}};
        
        int[][] arr2 = 
            {{1,2,3,4,5},
            {6,7,8,9,10},
            {11,12,13,14,15},
            {16,17,18,19,20},
            {21,22,23,24,25}};
        
        
        for(int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr.length;  j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
        System.out.println();
        arrayTurn(arr.length, arr.length, arr);
        
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

2. 리스트 순서대로

개발실에 근무하는 홍길동은 다음의 순서대로 버그 수정을 의뢰받았다.

 

# 작업 리스트

우선순위 / 소요시간 / 작업내용

 

낮음, 1, A.로그인 화면 오타 수정

긴급, 3, B.OTP 사용자 로그인 안됨

보통, 1, C.권한 안내 문구 수정

낮음, 2, D.로딩중 표시 아이콘 변경

긴급, 3, E.메일의 본문이 표시되지 않는 문제

보통, 1, F.첨부파일 사이즈 표시 오류 수정

긴급, 2, G.메일 전송시 첨부파일 누락됨

보통, 3, H.1:1 문의 기능 구현

낮음, 1, I.제품 로고 변경

보통, 3, J.안읽음 카운트 오류 문제 

낮음, 1, K.폰트 색상 변경 

긴급, 2, L.전체 메일함 동기화 안되는 문제

 

홍길동이 처리해야할 작업내용의 순서를 나열하시오

조건:

- "긴급", "보통", "낮음" 의 우선 순위를 가진다.

- 동일한 우선 순위 작업의 경우, 소요시간이 작은 것을 우선으로 한다.

- 동일한 소요시간의 작업인 경우, 먼저 들어온 작업을 우선한다.

(개발 언어 선택은 자유 C,C++,PHP,python,Javascript,JAVA 등)

 

[출력 결과]

긴급, 2, G.메일 전송시 첨부파일 누락됨

긴급, 2, L.전체 메일함 동기화 안되는 문제

긴급, 3, B.OTP 사용자 로그인 안됨

긴급, 3, E.메일의 본문이 표시되지 않는 문제

 

보통, 1, C.권한 안내 문구 수정

보통, 1, F.첨부파일 사이즈 표시 오류 수정

보통, 3, H.1:1 문의 기능 구현

보통, 3, J.안읽음 카운트 오류 문제 

 

낮음, 1, A.로그인 화면 오타 수정

낮음, 1, I.제품 로고 변경

낮음, 1, K.폰트 색상 변경 

낮음, 2, D.로딩중 표시 아이콘 변경

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package linuxware2;
 
 
public class OrderList  {
 
    Level level;
    int number;
    String alphabet;
    
    
    public OrderList(Level level, int number, String alphabet) {
        super();
        this.level = level;
        this.number = number;
        this.alphabet = alphabet;
    }
 
    public enum Level {
        긴급, 보통, 낮음
    }
    
    public Level getLevel() {
        return level;
    }
 
    public void setLevel(Level level) {
        this.level = level;
    }
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public String getAlphabet() {
        return alphabet;
    }
 
    public void setAlphabet(String alphabet) {
        this.alphabet = alphabet;
    }
    
    public static void main(String[] args) {
        List<OrderList> data = new ArrayList<OrderList>(); 
        data.add(new OrderList(Level.낮음, 1"A.로그인 화면 오타 수정"));
        data.add(new OrderList(Level.긴급, 3"B.OTP 사용자 로그인 안됨"));
        data.add(new OrderList(Level.보통, 1"C.권한 안내 문구 수정"));
        data.add(new OrderList(Level.낮음, 2"D.로딩중 표시 아이콘 변경"));
        data.add(new OrderList(Level.긴급, 3"E.메일의 본문이 표시되지 않는 문제"));
        data.add(new OrderList(Level.보통, 1"F.첨부파일 사이즈 표시 오류 수정"));
        data.add(new OrderList(Level.긴급, 2"G.메일 전송시 첨부파일 누락됨"));
        data.add(new OrderList(Level.보통, 3"H.1:1 문의 기능 구현"));
        data.add(new OrderList(Level.낮음, 1"I.제품 로고 변경"));
        data.add(new OrderList(Level.보통, 3"J.안읽음 카운트 오류 문제"));
        data.add(new OrderList(Level.낮음, 1"K.폰트 색상 변경"));
        data.add(new OrderList(Level.긴급, 2"L.전체 메일함 동기화 안되는 문제"));
        
        Collections.sort(data, new Comparator<OrderList>() {
            @Override
            public int compare(OrderList entry1, OrderList entry2) {
                Level time1 = entry1.getLevel();
                Level time2 = entry2.getLevel();
                if(time1 == time2) {
                    int number1 = entry1.getNumber();
                    int number2 = entry2.getNumber();
                    if(number1 > number2) {
                        return 1;
                    } else if(number1 < number2) {
                        return -1;
                    } else {
                        String letter1 = entry1.getAlphabet();
                        String letter2 = entry2.getAlphabet();
                        return letter1.compareTo(letter2);
                    }
                }
                return time1.compareTo(time2);
            }
            
        });
        for(OrderList all : data) {
            System.out.println(all.getLevel() + " \t " + all.getNumber() + "\t" + all.getAlphabet());
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

처음엔 다순히 Comparator 사용해서 가나다 순서대로 출력하는줄 알았는데 보니까 긴급 > 보통 > 낮음 순위여서 나의 기준으로 순위를 정해야되는 상황이 생겼다. 그래서 다시 Enum를 만들어서 순위 정한후 출력!

반응형