https://programmers.co.kr/learn/courses/30/lessons/64061
<풀이>
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, 0, sizeof(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;
}
|
시뮬레이션에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 - 오픈채팅방 (0) | 2020.05.07 |
---|---|
[C++] 프로그래머스 - 튜플 (0) | 2020.05.07 |
[C++] 프로그래머스 - 외벽 점검 (0) | 2020.05.07 |
[C++] 프로그래머스 - 기둥과 보 설치 (0) | 2020.05.07 |
[C++] 프로그래머스 - 블록 이동하기 (0) | 2020.05.07 |