반응형
https://programmers.co.kr/learn/courses/30/lessons/64061
문제 접근법
- 바구니가 모든 인형이 들어갈만큼 크다고 했으므로 moves의 크기만큼의 vector를 준비한다.
- moves의 값을 y값으로 두고 board[x][y]를 x를 0부터 borad의 size - 1만큼 순회하면서 board[x][y]가 0이 아닌값을 찾는다.
- vector의 index가 0일경우(vector에 아무것도 안들어온 상태일 경우)
- vector[index]에 board[x][y]의 값을 넣어주고 board[x][y]를 0으로 바꿔준다.
- index값을 1증가시킨다.
- vector의 index가 0이 아닌경우
- vector[index] == board[x][y]인 경우
- index의 값을 1감소시킨다.
- answer 값을 2증가시킨다(같은 인형이기 때문에)
- vector[index] != board[x][y]인 경우
- index의 값을 1증가시킨다.
- vector[index]에 board[x][y]의 값을 넣어주고 board[x][y] = 0으로 바꿔준다.
- vector[index] == board[x][y]인 경우
- vector의 index가 0일경우(vector에 아무것도 안들어온 상태일 경우)
- 최종 answer 값을 return한다.
아래는 코드입니다.
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
|
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
int len = moves.size();
int bLen = board.size();
int index = 0;
vector<int> v(len);
for(int i = 0; i < len; i++)
{
int move = moves[i] - 1;
for(int j = 0; j < bLen; j++)
{
if(board[j][move] != 0)
{
if(v[0] == 0)
v[index] = board[j][move];
else if(v[index] != board[j][move])
v[++index] = board[j][move];
else
{
v[index] = 0;
index--;
if(index < 0)
index = 0;
answer += 2;
}
board[j][move] = 0;
break;
}
}
}
return answer;
}
|
cs |
반응형
'프로그래머스 문제풀이 > LEVEL 1' 카테고리의 다른 글
[프로그래머스 / Level 1] 나누어 떨어지는 숫자 배열 (C++) (0) | 2021.11.17 |
---|---|
[프로그래머스 / Level 1] 같은 숫자는 싫어 (C++) (0) | 2021.11.17 |
[프로그래머스 / Level 1] 가운데 글자 가져오기 (C++) (0) | 2021.11.17 |
[프로그래머스 / Level 1] 2016년 (0) | 2021.10.27 |
[프로그래머스 / Level 1] 체육복 (0) | 2021.06.22 |