programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
이 문제에서는 vector로 입력이 주어진다. 주의해야할 점은 주어진 NxN 행렬에서 탐색하려는 행만 접근하는 것이 아닌 0번 행부터 N-1번 행까지 0이 아닐 때 까지 열을 모두 탐색해야한다는 점이다. 즉 한 행은 뽑기 기계의 깊이를 나타낸다. 아래는 풀이한 코드이다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
vector<int> arr;
int answer = 0;
for(int i = 0; i < moves.size(); i++) {
int idx = moves[i]-1; //탐색하고자 하는 열
int doll = 0;
for(int j = 0; j < board.size(); j++) { //해당 각 행에서 인형이 있는지 확인
if(board[j][idx] != 0) { //인형이 발견한 경우
doll = board[j][idx];
board[j][idx] = 0;
break;
}
}
if(doll == 0) continue; //인형을 발견하지 못한 경우
if(arr.size() == 0) { //뽑은 인형을 담는 바구니가 비어있는 경우
arr.push_back(doll);
continue;
}
else if(arr.back() == doll) { //바구니 맨 위에있는 인형과 뽑은 인형이 같은 경우
arr.pop_back();
answer+=2; //이미 있는 인형과 발견한 인형 모두 사라지므로 +2
}
else arr.push_back(doll); //바구니 맨 위에있는 인형과 뽑은 인형이 다른 경우
}
return answer;
}
뽑으려고하는 열들은 move라는 vector로 주어진다. 뽑기를 진행하며 주어진 행렬 board의 해당 열에 인형이 있는지 확인한다. 인형이 있는 경우 바구니인 arr의 마지막 값과 비교한다. 만약 arr가 비어있는 경우 push_back을 하고 arr의 마지막 값이 인형과 같은 경우 두 인형 모두 터져서 사라지고 인형 2개가 사라지므로 answer를 2 올려준다. 마지마으로 인형이 다른 경우 마지막에 push_back해준다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 다단계 칫솔 판매 풀이 (0) | 2021.07.30 |
---|---|
[C++] 프로그래머스 다리를 지나는 트럭 풀이 (0) | 2021.07.28 |
[C++] 프로그래머스 베스트 앨범 풀이(해시) (1) | 2021.06.30 |
프로그래머스 2019 카카오 개발자 겨울 인턴십 불량 사용자 풀이 (1) | 2021.05.06 |
프로그래머스 2019 카카오 개발자 겨울 튜플 풀이 (0) | 2021.05.05 |