문제알아서 찾아보시고 내가 생각한 풀이과정을 나열하겠다
카카오 인턴 코테라 그래서 무서웠는데 1번문제인건가 완전쉽다
하지만 아주 살짝 복잡하고 어이없는 부분에서 시간을 날렸기때문에 여기에 글을 작성한다
먼저 인형이 나열되어있는 이차원 배열을 입력받는다
그리고 인형을 뽑을 자리를 정하는 move배열을 입력받는다
누가봐도 스택을 이용하라는 듯한 문제이기때문에 스택을 이용해 문제를 해결했다
public class CraneDoll {
public int solution(int[][] arr, int[] basketArr) {
int result = 0;
Stack<Integer> stack = new Stack<>();
for(int i=0; i<basketArr.length; i++) {
int catchNum = 0;
int bNum = basketArr[i]-1;
crane:for(int j=0; j<arr.length; j++) {
if(arr[j][bNum]!=0) {
catchNum = arr[j][bNum];
arr[j][bNum] = 0;
break crane;
}
}
System.out.println(catchNum);
if(catchNum == 0) continue;
else {
if(stack.empty()) {
stack.push(catchNum);
} else{
int lastNum = stack.peek();
if(lastNum == catchNum){
stack.pop();
result+=2;
} else {
stack.push(catchNum);
}
}
}
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
CraneDoll main = new CraneDoll();
int arrNum = sc.nextInt();
int[][] arr = new int[arrNum][arrNum];
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[0].length; j++) {
arr[i][j] = sc.nextInt();
}
}
int basketNum = sc.nextInt();
int[] basketArr = new int[basketNum];
for(int i=0; i<basketArr.length; i++) {
basketArr[i] = sc.nextInt();
}
int result = main.solution(arr,basketArr);
System.out.println(result);
}
}
문제를 조그만 문제들로 쪼개서 풀어보는 방법
문제를 정확히 안읽는다
위에서 말한 시간낭비는 문제에서 "터진 인형들의 합"이라고 말했는데
나는 "터진 인형들의 쌍의 합"이라고 생각을해버려서 답이 계속 절반만 나와 거기서 시간을 낭비했다
문제를 풀기위해서는 문제를 정확히 이해하는게 아주 중요하다
그러므로 문제를 정확히 이해하고 문제를 풀자