Posts [알고리즘] 프로그래머스 - 크레인 인형뽑기 게임
Post
Cancel

[알고리즘] 프로그래머스 - 크레인 인형뽑기 게임


문제


접근

인형을 집는 부분, 쌓인 인형을 체크하는 부분으로 나누어서 생각했다.

집는 부분은 해당 열의 데이터를 순서대로 확인하며 비어있지 않은 칸을 만나면 인형을 꺼낸다.

체크하는 부분은 쌓인 인형의 가장 꼭대기와 현재 집은 인형이 같은지만 확인하면 된다.


코드

  • 파이썬 코드
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
def solution(board, moves):
    answer = 0
    box = []
    for move in moves:
        for i in range(len(board)):
            if board[i][move-1] != 0:
                isSame = boxCheck(box, board[i][move-1])
                if isSame:
                    box.pop()
                    answer += 2
                else:
                    box.append(board[i][move-1])

                board[i][move-1] = 0
                break

    return answer

def boxCheck(box, item):
    isSame = False
    if len(box) == 0:
        isSame = False
    else:
        if box[-1] == item:
            isSame = True

    return isSame
  • C++ 코드
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
bool boxCheck(vector<int> box, int item){
    bool isSame = false;
    if(box.empty())
        return isSame;

    if(box.back() == item)
        isSame = true;
    return isSame;
}

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    vector<int> box;
    for(int i = 0; i < moves.size(); i++){
        int move = moves[i] - 1;
        for(int j = 0; j < board[0].size(); j++){
            if(board[j][move] != 0){
                bool isSame = boxCheck(box, board[j][move]);
                if(isSame){
                    box.pop_back();
                    answer+=2;
                }
                else{
                    box.push_back(board[j][move]);
                }
                board[j][move] = 0;
                break;
            }
        }
    }
    return answer;
}


This post is licensed under CC BY 4.0 by the author.

데이터베이스 정리 2 - 관계형 데이터 모델

[프로그래머스 인공지능스쿨] Week1-4 파이썬 기초