알고리즘문제풀이
[JAVA] Programmers LEVEL1 크레인 인형뽑기
Hindsight..
2020. 9. 11. 00:28
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;
}
}
문제를 보면 스택을 노골적으로 요구하고 있는 것처럼 보이는데, 내 코드보다 짧고 효율적으로 쓴 사람들도 훨씬 많았다..
하지만 그 코드들을 직관적으로 이해하기 힘들 분들을 위해 조금이라도 도움이 될 수 있을까 해서 업로드 한다!