https://programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

<풀이>

1. 주어지는 명령을 그대로 구현하여 수행한다.

2. 없어진 인형의 개수를 반환한다.

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
#include <iostream>
#include <vector>
#include <cstring>
#include <stack>
using namespace std;
 
int map[31][31];
stack<int> basket;
 
int solution(vector<vector<int>> board, vector<int> moves) {
 
    int answer = 0;
    
    memset(map, 0sizeof(map));
 
    int m = board.size();
    int n = moves.size();
 
    //보드 -> 맵
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < m; j++) {
            map[i][j] = board[i][j];
        }
    }
 
    //뽑기 명령 수행
    for (int i = 0; i < n; i++) {
 
        //명령의 열 선택
        int line = moves[i] - 1;
 
        //열의 가장 위에서부터 아래로 탐색
        for (int j = 0; j < m; j++) {
            
            //인형을 발견하였을 경우, 인형 뽑기
            if (map[j][line] != 0) {
 
                //바구니가 비어있으면 인형 담기
                if (basket.empty()) {
                    basket.push(map[j][line]);
                }
                //바구니가 비어있지 않을 경우
                else {
                    //뽑은 인형과 바구니 제일 위의 인형이 같을 경우 없애주고, answer+2
                    if (map[j][line] == basket.top()) {
                        basket.pop();
                        answer += 2;
                    }
                    //같지 않다면 바구니에 담기
                    else {
                        basket.push(map[j][line]);
                    }
                }
 
                //맵에서 인형 없애기
                map[j][line] = 0;
                break;
            }
        }
    }
    return answer;
}
 

 

시뮬레이션에 대해 알아볼 수 있는 문제였습니다.

+ Recent posts