소스 보러가기
문제 보러가기


사용한 알고리즘 및 자료구조
Sol 1 : ArrayList, Sol 2 : Stack

풀이
따로 알고리즘 구현이 필요 없는 문제이다. ArrayList, List, Stack 과 같은 자료구조 개념을 알고 있다면 쉽게 풀 수 있는 문제이다.

  1. 열 순서대로 인형 탐색

  2. 인형 있으면 -> 해당 칸 빈칸으로

  3. Stack or List 마지막 칸과 비교 같으면 삭제 후 정답 카운트 증가
    다르면 맨 뒤에 추가

  4. moves배열의 길이만큼 수행했다면 정답 카운트 출력

상당히 간단하다. Stack, List 둘다 가능할 것이라 생각하여 solution을 2개 만들었다.

로직은 같고 차이점은 Stack은 뽑는 행위가 디폴트 값으로 마지막 위치에 인형을 뽑는다. 그리고List는 (인덱스 값-1)을 매개변수로 get()을 이용하여 바구니 마지막 위치에 있는 인형을 출력한다.

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
// before test, have to delete 'static' keywords
    public static int solution(int[][] board, int[] moves) {
        int answer = 0;
 
        ArrayList<Integer> box = new ArrayList<Integer>();
 
        for (int idx = 0; idx < moves.length; idx++) {
 
            int row = moves[idx] - 1;
 
            for (int col = 0; col < board.length; col++) {
 
                int boxLastIdx = box.size() - 1;
 
                if (board[col][row] != 0) {
 
                    if (box.isEmpty()) {
                        box.add(board[col][row]);
                    } else {
 
                        if (box.get(boxLastIdx) == board[col][row]) {
 
                            box.remove(boxLastIdx);
                            answer += 2;
                        } else {
                            box.add(board[col][row]);
                        }
 
                    }
                    board[col][row] = 0;
 
                    break;
 
                }
 
            }
 
        }
 
        return answer;
    }
    
 
    public int solution2(int[][] board, int[] moves) {
        Stack<Integer> box = new Stack<Integer>();
 
        int answer = 0;
        for (int i = 0; i < moves.length; i++) {
            int row = moves[i];
            for (int col = 0; col < board.length; col++) {
                if (board[col][row - 1!= 0) {
 
                    if (box.empty()) {
                        box.push(board[col][row-1]);
                    } else {
 
                        if (box.peek() == board[col][row-1]) {
                            box.pop();
                            answer += 2;
                        } else {
 
                            box.push(board[col][row-1]);
                        }
 
                    }
                    board[col][row-1= 0;
 
                    break;
                }
 
            }
 
        }
 
        return answer;
    }
cs

'알고리즘(추가예정) > 기타' 카테고리의 다른 글

[프로그래머스] 베스트앨범  (0) 2020.08.30


정말로 가고싶은 기업이었다. 한동안 우아한 형제서버개발자를 상상할정도로..


몇일동안 몸이 너무 아픈데 , 계속해서 문제를 풀어왔다. 


결과는.... 눈물이 났다..정말..


문제는 가볍게 보면 어려웠지만 , 보다보면 풀 수 있을것이라 생각했다. 


그런데 무슨 이유인지는 몰라도 풀리지가 않았다. 알고리즘을 손으로 완성시켜 구현하는데, 문제만 더 생겼다..


 갑자기 어지럽고..결국 제대로 풀지 못하고 제출했다..1번만 어느정도 완성시키고..나머지는 구현을 하다 종료를 했다..




실패의 원인을 살펴보았다.


1) 컨디션 조절 실패, 7시부터 오전아르바이트 후 점심먹고 2시부터 새벽2시까지 공부를 했다. 몸이 안좋아졌을때 하루라도 쉬었어야했다..

    아프더라도 약먹고 참으면서 공부했던게 독이 된 것 같다. 


2) 알고리즘 문제를 다양하게 만나봐야겠다, 그동안 너무 편협한 범위로 알고리즘을 푼 것 같다. 


3) 원래 스타일은 천천히 푸는 스타일이다.. 스타일을 바꾸도록 해야겠다. 더욱더 단련해서 빠르고 정확한 능력을 길러야겠다.






너무나 아쉬워서.. 한동안 말을 하지 못했다. 하지만, 뚜껑은 열려야 아는법 ! 안되더라도 더 공부해서 도전해봐야겠다..


뭔가.. 여러 상황이 겹쳐, 지금까지봤던 시험보다 어려웠던것 같았다..



+ Recent posts