728x90
programmers.co.kr/learn/courses/30/lessons/64061
30분안에는 못풀었지만, 수빈이가 말한거에서 힌트 얻어서 푼 문제 ㅋㅋ
이미 넣은 숫자를 어떻게 피해갈지 고민해서 visit을 표시하려고, 클래스도 만들어보고 했다가 수빈이가 0으로 초기화한다는 얘기를 해서 '아..그러면 되겠구나..'하고 바로 후루룩 풀수 있었다. 수빈 감사..🙇♀️
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
Stack<Integer> stack = new Stack<>();
int pop = 0;
for (int i = 0; i < moves.length; i++) {
int num = moves[i];
for(int j = 0; j < board.length; j++){
if (board[j][num-1] != 0) {
if(!stack.isEmpty() && stack.peek() == board[j][num-1]){
stack.pop();
board[j][num-1] = 0;
pop +=2;
break;
}
stack.push(board[j][num-1]);
board[j][num-1] = 0;
break;
}
}
}
return pop;
}
}
board 배열구조에서 세로에서 인형을 뽑아야 하고, 세로 첫번째 줄에서 인형을 뽑는다면 moves요소가 1이어야 함
따라서 moves[i] 를 num 이라고 할 때, 세로 줄 요소를 탐색하려면 j=0 부터 길이만큼 탐색하는 동안 board[j][num-1]의 요소를 보면 됨
moves[i]인 num은 1,2,3,4,5인데, 1번째 줄은 j가 0이어야 하므로 board[j][num-1]
[0,0] [1,0], [2,0], [3,0], [4,0]
0 0 0 4 3
0이 아닌 경우에만 stack에 담고, 담은 수는 더 이상 담지 않도록 0으로 초기화한다.
✳ stack에 담기전에 마지막 수가 현재 담으려는 수와 같다면, 마지막에 담긴 수를 pop()으로 꺼내고, 0으로 초기화한다. 결과 변수 pop에 2를 더해준다.
추가적으로 진행하지 않도록 break;
필수!
728x90
'코딩테스트' 카테고리의 다른 글
[LeetCode] 819. Most Common Word (0) | 2021.05.17 |
---|---|
[LeetCode] 460. LFU Cache (0) | 2021.05.17 |
[프로그래머스] [카카오 인턴] 키패드 누르기 (0) | 2021.05.08 |
[LeetCode] 141. Linked List Cycle (0) | 2021.05.06 |
[LeetCode] Palindrome Linked List (0) | 2021.05.06 |