반응형
문제 링크
코딩테스트 연습 - 크레인 인형뽑기 게임 | 프로그래머스 스쿨 (programmers.co.kr)
문제 이해하기
- 2차원배열 board의 값이 0이면 해당 자리는 공백으로 봐야 합니다.
- 각 인형의 고유의 숫자로 표현되며, 인형을 뽑았으면 해당 인덱스의 값을 0으로 바꿔 공백으로 표현해야 합니다.
- 특정 공간에 넣었다 뺐다를 반복할 때 가장 좋은 방법은 Stack이라고 생각합니다.
문제 풀이
코드-1
public int solution(int[][] board, int[] moves) {
int answer = 0, doll = 0;
Stack<Integer> stack = new Stack<Integer>();
for(int move : moves) {
move--;
for(int i=0; i<board.length; i++) {
doll = board[i][move];
if(doll > 0) {
board[i][move] = 0;
if(!stack.isEmpty() && doll == stack.peek()) {
stack.pop();
answer += 2;
} else {
stack.push(doll);
}
break;
}
}
}
return answer;
}
move--
우리가 표현하는 인덱스는 0부터 시작인데 문제에서는 1로 표현했으므로 기본적으로 move-1 을 해주어야 합니다.
doll = board[i][move];
인형을 뽑는 부분인데, 0은 공백이니 0보다 큰 경우 인형이 있다고 봐야 합니다.
인형이 있다면 인형을 뽑고board[i][move] = 0;
이렇게 0으로 바꿔서 공백으로 표현해야 합니다.
if(!stack.isEmpty() && doll == stack.peek())
핵심이 되는 조건문입니다.
스택의 마지막 값을 가져와 현재 인형과 같은 인형인지 비교합니다.
같은 인형이면stack.pop();
인형을 빼고, 인형이 2개 터진 것이므로answer += 2;
2점을 더합니다.
테스트 케이스 처리속도
- 0.11ms ~ 0.89ms
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 키패드 누르기 java :: 2020 카카오 인턴십 (0) | 2022.07.08 |
---|---|
프로그래머스 - 신규 아이디 추천 java :: 2021 KAKAO BLIND RECRUITMENT :: 72410 (0) | 2022.07.08 |
프로그래머스 - 없는 숫자 더하기 java :: 월간 코드 챌린지 시즌3 (0) | 2022.07.06 |
프로그래머스 - 음양 더하기 java :: 월간 코드 챌린지 시즌2 (0) | 2022.07.06 |
프로그래머스 - 소수 만들기 java :: Summer/Winter Coding(~2018) :: 12977 (0) | 2022.07.06 |