728x90
무슨 문제길래 카카오 겨울 인턴십 문제가 푼 사람이 2만명이 다 돼가나 했더니...
이중배열의 개념만 잘 이해하고 있으면 생각보다 쉬운 문제였다!
1. board.size()를 하면 가장 겉의 배열의 요소 수를 세어주므로 세로줄 수, 즉 row_num으로 둔다.
2. moves[i]는 x(col_num)을 지정해 줬다. 이중배열은 array[row_num][col_num] 형식으로 요소를 꺼낸다.
3. bucket에 push/pop_back을 사용해 꺼낸 인형의 숫자를 넣거나 없앤다.
4. 인형을 없앨 때는 bucket의 size가 1 이상이어야 비교가 가능하므로 &&를 걸어준다.
#include <string>
#include <vector>
using namespace std;
// vector<vector<int>> board = { {0,0,0,0,0},
// {0,0,1,0,3},
// {0,2,5,0,1},
// {4,2,4,4,2},
// {3,5,1,3,1} };
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
int row_num = board.size();
vector<int> bucket;
for (int i = 0; i < moves.size(); i++) {
int x = moves[i] - 1;
for (int j = 0; j < row_num; j++) {
if (board[j][x] != 0) {
bucket.push_back(board[j][x]);
board[j][x] = 0;
if (bucket.size() > 1 && bucket[bucket.size() - 1] == bucket[bucket.size() - 2]) {
bucket.pop_back();
bucket.pop_back();
answer += 2;
}
break;
}
}
}
return answer;
}
'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글
[C++] 프로그래머스 - 소수 만들기 (0) | 2021.07.13 |
---|---|
[C++] 프로그래머스 - 신규 아이디 추천 (0) | 2021.07.13 |
[C++] 프로그래머스 - 2016년 (0) | 2021.07.02 |
[C++] 프로그래머스 - 모의고사 (0) | 2021.07.02 |
[C++] 프로그래머스 - 폰켓몬 (set) (0) | 2021.06.29 |