반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/64061
import java.util.*;
class Solution {
int answer = 0;
public int solution(int[][] board, int[] moves) {
Stack<Integer> stack = new Stack<>(); // Stack으로 옮겨질 바구니를 만든다
int depth = board.length; // 인형뽑기 바구니의 깊이(depth)를 구한다
for(int i = 0; i < moves.length; i++) { // 옮기는 수인 moves 만큼 인형을 뽑는다
int c = moves[i] - 1; // 배열은 본디 0부터 시작하고 인형뽑기는 1부터 시작하므로 -1 해준다 편하려고
for(int j = 0; j < depth; j++) {
if(board[j][c] == 0) { // 0 이라는건 인형 없다는 뜻이니까 패스
continue; // 다음 숫자 반복
} else { // 인형이 있는 경우
basketReset(stack, board[j][c]); // 옮겨질 바구니에 인형 넣는 함수에다가 현재 값을 넣어줄 것
board[j][c] = 0; // 인형 뽑았으니까 0으로 바꾸기
break; // 주어진 move 였던 c가 한번 옮겨짐으로써 끝났으니까 break
}
}
}
return answer * 2;
}
public void basketReset(Stack<Integer> stack, int current) {
if(stack.isEmpty()) { // 만약에 스택(바구니)이 비었다면
stack.add(current); // 그냥 현재 인형을 스택에 넣어줌
return;
}
// peek() 스택의 제일 상단에 있는 즉 제일 마지막으로 저장된 요소 반환
if(stack.peek() == current) { // 스택에 있는 마지막 인형과 현재 넣은 인형이 같다면
stack.pop(); // 안넣고 마지막 인형을 삭제함 그러면 둘 다 없애는 꼴
answer++; // 한번 터트림 == 2개가 없어졌다는 의미 (나중에 *2 해야해)
return;
} else { // 스택의 마지막 인형이랑 현재 넣을 인형이 다르면 그냥 인형 넣어줌
stack.add(current);
}
}
}
반응형
LIST
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/java] K번째수 (0) | 2020.10.21 |
---|---|
[프로그래머스/java] 모의고사 (0) | 2020.10.21 |
[프로그래머스/java] 완주하지 못한 선수 (0) | 2020.10.21 |
[프로그래머스/java] 두 개 뽑아서 더하기 (0) | 2020.10.21 |
[자바] 선택정렬(Selection Sort) 코드. 시간복잡도 (0) | 2020.03.24 |