문제 설명
풀이 : Success
소스 코드
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0, cnt = -1;
int n = board.length;
List<Integer> basket = new ArrayList<>();
for (int item: moves) {
for (int i = 0; i < n; i++) {
if(board[i][item-1] != 0) {
cnt++;
basket.add(board[i][item-1]);
board[i][item-1] = 0;
if(cnt>0 && basket.get(cnt) == basket.get(cnt-1)) {
basket.remove(cnt);
basket.remove(cnt-1);
answer += 2;
cnt -= 2;
}
break;
}
}
}
return answer;
}
}
풀이 회고
우선 터트려져 사라진 인형의 개수(결과값)를 저장하기 위한 answer 변수를 0으로 초기화시켜주었고, 바구니에 담긴 인형의 인덱스를 나타내기 위한 cnt 변수를 -1로 초기화시켜주었다. cnt가 -1이라는 것은 현재 바구니에 인형이 없다는 것을 의미한다.
이때 바구니는 ArrayList 자료구조를 이용하여 나타내고자 했다. 왜냐하면 바구니에 인형을 추가(add) 및 삭제(remove)하는 작업보다는 바구니에 존재하는 특정 인형에 접근(get)하는 작업이 더 많다고 생각했기 때문이다.
입력받는 매개변수 정수형 배열 moves의 원소들은 게임 화면의 가로(열) 인덱스를 가리키므로 for문을 통해 moves의 원소들을 순회하도록 했고 이때 해당 가로(열) 상 세로(행)을 다시 순회하여 가장 위에 있는 인형부터 바구니에 담도록 했고 바구니에 인형이 하나 증가했으므로 cnt는 +1 해주었다. 인형을 바구니에 담으면 더이상 세로(행)을 순회하면 안되므로 break 시켰다.
이후 바구니에 기존에 있었던 인형과 방금 담았던 인형이 일치한다면 두 인형을 바구니에서 삭제시키고 결과값 answer를 +2 해주었다. 또한 두개의 인형이 줄었으므로 cnt는 -2 해주었다.
참고자료
- https://programmers.co.kr/learn/courses/30/lessons/64061
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기 - Java (0) | 2022.02.18 |
---|---|
[프로그래머스] 신고 결과 받기 - Java (0) | 2022.02.16 |
[프로그래머스] K번째 수 - Java (0) | 2022.01.19 |
[프로그래머스] 이상한 문자 만들기 - Java (0) | 2022.01.19 |
[프로그래머스] 모의고사 - Java (0) | 2022.01.19 |