https://programmers.co.kr/learn/courses/30/lessons/64061
카카오 인턴십 문제중에 가장 쉬운문제라고 생각하는 문제이다.
깊게 생각할 필요 없이 차례대로 문제를 읽으면서 해석해야한다.
가장 주의할점은, 인형을 뽑으면 그 자리를 0 (뽑은 상태)로 바꿔줘야 한다.
1. 먼저 인형이 있는지(0이 아닌지) 확인한다.
2. 스택이 비어있는 경우와, 비어있지 않은 경우 두가지를 고려한다.
-스택이 비어있는 경우
->값을 스택에 넣어준다.
-스택이 비어있지 않은경우
-> 스택 맨 위(stack.peek()) 의 값과, 방금 뽑은 값이 동일하다면 카운트를 2개 올려준다.
-> 값이 동일하지 않다면 스택에 넣어준다.
3. 인형을 뽑았으니, 값을 0으로 바꿔준다.
이 문제를 풀면서 터진 인형의 개수를 물어보는게 아니라 터진 횟수를 구하는줄 알고 오래걸렸다.
문제를 끝까지 읽지 않아서 생긴 폐해이다..
import java.util.Stack;
public class KAKAO인형뽑기 {
public static void main(String[] args) {
int[][] board = { { 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 } };
int[] moves = { 1, 5, 3, 5, 1, 2, 1, 4 };
System.out.println(solution(board, moves));
}
public static int solution(int[][] board, int[] moves) {
int res = 0;
Stack<Integer> st = new Stack<>();
for (int i = 0; i < moves.length; i++) {
for (int j = 0; j < board.length; j++) {
if (board[j][moves[i] - 1] != 0) {
if (!st.empty()) { // 스택이 비어있을때
if (st.peek() == board[j][moves[i] - 1]) { // 피크값과 현재값이 동일하다면 터진다.
res += 2;
st.pop();
} else { // 동일하지 않다면 그냥 넣어만 준다.
st.push(board[j][moves[i] - 1]);
}
} else {// 스택이 비어있다면
st.push(board[j][moves[i] - 1]);
}
board[j][moves[i] - 1] = 0;
break;
}
}
}
return res;
}
}
'Algorithm by java' 카테고리의 다른 글
[프로그래머스] 카카오 2020인턴십 키패드 누르기 JAVA 풀이 (0) | 2020.07.09 |
---|---|
프로그래머스 Level2 스킬트리 JAVA (0) | 2020.07.05 |
[알고리즘] Missing Ranges (java 풀이) leetcode (0) | 2020.06.25 |
[알고리즘] Find All Anagrams in a String (java 풀이) leetcode (0) | 2020.06.18 |
[알고리즘] meeting Room2 (java 풀이) (0) | 2020.06.11 |