programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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]] [1,5,3,5,1,2,1,4] 4
programmers.co.kr
import java.util.Stack;
class solution {
public int solution(int[][] board, int[] moves) {
int picked, idx, answer = 0;
Stack<Integer> s = new Stack<Integer>();
int[] tmp;
for (int cmd : moves) {
cmd--;
tmp = rtoc(board, cmd); // 커맨드에 해당하는 열을 추출
idx = getDoll(tmp); // 인덱스 추출
if (idx == -1) // -1이면 다음 커맨
continue;
picked = board[idx][cmd]; // 해당 열의 숫자를 저장
board[idx][cmd] = 0; // 해당 열은 0으로 바꿔준다.
if (!s.isEmpty() && s.peek() == picked) { // 스택이 비지 않고, 가장 위의 수와 위에서 집은 수와 비교
answer += 2;
s.pop(); // 같다면 answer을 2 추가해주고, 가장 위의 수 pop 후 다음 커맨드
continue;
}
s.add(picked); // 위의 경우에 해당하지 않는다면, picked를 스택에 넣고 다음 커맨드
}
return answer;
}
int[] rtoc(int[][] board, int num) { // 가로세로변경
int[] arr = new int[board.length];
for (int j = 0; j < board.length; j++) {
arr[j] = board[j][num];
}
return arr;
}
int getDoll(int[] arr) { // 배열 중 가장 첫번째로 0 이 아닌 인덱스 리턴, 모두 0일 경우 -1 리턴
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
return i;
}
}
return -1;
}
}
문제를 보면 스택을 노골적으로 요구하고 있는 것처럼 보이는데, 내 코드보다 짧고 효율적으로 쓴 사람들도 훨씬 많았다..
하지만 그 코드들을 직관적으로 이해하기 힘들 분들을 위해 조금이라도 도움이 될 수 있을까 해서 업로드 한다!
'알고리즘문제풀이' 카테고리의 다른 글
[JAVA] 백준 3190 뱀 (0) | 2020.10.31 |
---|---|
[JAVA] 백준 1507 궁금한 민호 (0) | 2020.10.03 |
[JAVA] 백준 3109 빵집 [ 백트래킹 ] (0) | 2020.08.27 |
[JAVA] 백준 2206 벽 부수고 이동하기 [BFS] (0) | 2020.08.26 |
[JAVA] 백준 15686 치킨 배달 (0) | 2020.08.25 |