https://programmers.co.kr/learn/courses/30/lessons/64061
package programmers.p64061;
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> MovedDolls = new ArrayList<>();
public int solution(int[][] board, int[] moves) {
moveDolls(board, moves);
return checkDuplicates();
}
private void moveDolls(int[][] board, int[] moves) {
for (int i = 0; i < moves.length; i++) {
for (int j = 0; j < board.length; j++) {
int lastIndex = board.length-(j+1);
if (board[moves[i] - 1][lastIndex] != 0) {
int caughtDoll = board[moves[i] - 1][lastIndex];
MovedDolls.add(caughtDoll);
board[moves[i] - 1][lastIndex] = 0;
break;
}
}
}
}
private int checkDuplicates() {
int count = 0;
for (int i = 0; i < MovedDolls.size(); i++ ) {
if (i+1 == MovedDolls.size()) {
break;
}
if (MovedDolls.get(i) == MovedDolls.get(i+1) ) {
count += 2;
i++;
}
}
return count;
}
}
0은 공백
move 4 -> 2
move 1 -> 0
move 2 -> 3
move 1 -> 0
move 5 -> 3
move 3 -> 1
move 5 -> 1
move 1 -> 0
ArrayList에 0을 제외한 모든 숫자를 차례대로 담는다
같은 인형끼리 터진 인형을 세는 것이기 때문에
for문을 이용해서 같은숫자인지 비교해서 count 한다.
count되었으면 그 다음 비교를 위해서 i를 1 더해준다
move 4 -> 2
move 1 -> X
move 2 -> 3
move 1 -> X
move 5 -> 3
move 3 -> 1
move 5 -> 1
move 1 -> X
터뜨려서 사라진 인형의 갯수 -> return
첫번째 move한다.
move한 곳의 마지막인덱스의 값이 0인지 아닌지 체크한다
0이면 마지막인덱스-1이 마지막인덱스-1 이 0인지 아닌지 체크한다
마지막인덱스의 값이 0이 아니면 그 숫자를 임시 배열에 저장한다
moves가 다시 올걸 대비해서 저장한 숫자는 없는셈 치게 만들어야한다
그래야 다음에 왔을떄 없는셈 친 숫자 그 다음 숫자를 저장하니까.
boolean으로 앞뒤숫자가같은지 체크 만약에 ture이면
예) index[0], index[1], index[2] 이 모두 같은 값이다
일단 index[0]과 index[1]이 같은지체크한다
0과 1이 같으면 boolean true 같지않으면 false
true이면 int count +2 를 한다.
true이면 index[2]과 index[3]를 비교한다
false이면 index[1]과 index[2]를 비교한다
아니면,
그냥 moves로 집은 모든 숫자들을 담는다.
대신에 0이면 똑같은 배열에서 다시 집는다. 0이아니면 딱한번만 집는다.
집어서 새로운 배열에 넣는다 ArrayList가 좋을듯
중복값 0을 다 제거한다.
00002 0002 000000002 이배열을 체크할떄
2 2 2 이렇게 나올것이다.
그런다음에
boolean으로 앞뒤숫자가같은지 체크
예) ArrayList.get(0), ArrayList.get(1), ArrayList.get(2) 이 모두 같은 값이다
일단 0과 0이 같은지체크한다
0과 1이 같으면 boolean true 같지않으면 false
true이면 int count +2 를 한다.
true이면 index[2]과 index[3]를 비교한다
false이면 index[1]과 index[2]를 비교한다
처음에는 그냥 원래 있던 배열을 가지고 어떻게든 해보려했는데
그냥 팀원말대로 주워담은걸 0으로 바꾸면 되네....
처음부터 끝까지 저렇게 상상할 필요가 없었던 거 같다.
코드짤때 모든게 다 바뀌기 때문이다.
정말 간략하게 어떻게 풀지 생각 하는 정도는 괜찮을 같다.
지나치게 생각을 많이한거 같다.
문제를 잘개쪼개서 절차대로 생각해서 쪼금씩 해결해나가다보면 답에 접근하게 되는것 같다.
한 개 주어진 테스트 케이스는 통과했는데 제출실패가 자꾸 떠서 열받는다. 저번에도 그랬는데 그때도 분명히 문제점이 있어서 그랬던거지만...특히 프로그래머스는 뭐가 문제인지 알려주지 않으니까 열받는다 ㅠ..
혼자 해결을 못해서 팀원들에게 물어봤다
중간에 인형들이 터지면 위에서 인형이 내려오는건데
배열로 생각하니까 옆으로 쭉 나열되어있어서 그걸 생각치못했다.