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
level2라고는 하지만 stack을 이용하고 적절한 분기처리를 해준다면 쉽게 풀 수 있다.
제일 위에 있는 것을 뽑는 과정에서 헤매긴 했다. ㅜㅜ
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
int length = board.length;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < moves.length; i++) {
//선택된 세로기준 라인(0부터 시작하기 때문에 -1을 빼서 배열과 같게 해줌)
int col = moves[i]-1;
int row = 0;//제일 위에 있는 것 찾기.
boolean flag = false;//비어있는 지 확인(에러 방지)
for (int j = 0; j < length; j++) {
if(board[j][col]!=0) {
row= j;
flag = true;
break;
}
}
if(!flag) break;
int temp = board[row][col];
board[row][col] = 0;//뽑았다는 의미로 0으로 초기화
//stack이 비어있지 않고, 뽑은 것과 제일 위가 같다면 제거하고 카운트 증가.
if(!stack.isEmpty()&&stack.peek() == temp) {
stack.pop();
answer+=2;
}else { //stack이 비어있거나, 뽑은 것과 제일 위가 다르다면 stack에 값 넣기.
stack.add(temp);
}
}
return answer;
}
}
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[beakjoon] 14890 경사로 java (0) | 2021.10.19 |
---|---|
[프로그래머스]쿼드압축 후 개수 세기 (0) | 2021.03.12 |
[프로그래머스]불량사용자 (0) | 2021.03.11 |
[프로그래머스][1차] 프렌즈4블록도움말 (0) | 2021.03.07 |
[프로그래머스]체육복 (0) | 2021.03.05 |