코딩테스트/Java

(2019 카카오)크레인 인형뽑기 게임 Java

SK_MOUSE 2020. 12. 18. 15:01

https://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]]

배열 큐를 만들어보고싶었는데, 안돼서 그냥 탐색 기법으로 풀었다.

import java.util.LinkedList; import java.util.Queue; import java.util.Stack; class Solution { ​​​​public int solution(int[][] board, int[] moves) { ​​​​​​​​int answer = 0; ​​​​​​​​//보관소도 스택으로 쌓음.(LIFO) ​​​​​​​​Stack<Integer> stack = new Stack<>(); ​​​​​​​​//LIFO 방식으로 peek()==뽑은값 소멸, 아니면 다시넣기. ​​​​​​​​for(int i =0; i<moves.length; i++){ ​​​​​​​​​​​​int pickLoc = moves[i]-1; ​​​​​​​​​​​​int pick = findVal(board, pickLoc);//참조변수 ​​​​​​​​​​​​if(pick==0) continue; ​​​​​​​​​​​​if(!stack.isEmpty() && stack.peek()==pick){//만약 뽑은인형과 맨위 인형이 같으면 ​​​​​​​​​​​​​​​​stack.pop();//보관소에서 인형 빼버리기. ​​​​​​​​​​​​​​​​answer++; ​​​​​​​​​​​​} ​​​​​​​​​​​​else{ ​​​​​​​​​​​​​​​​stack.push(pick); ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return answer*2; ​​​​} ​​​​public int findVal(int board[][], int j){ ​​​​​​​​for(int i =0; i<board.length; i++){ ​​​​​​​​​​​​if(board[i][j]!=0) { ​​​​​​​​​​​​​​​​int get = board[i][j]; ​​​​​​​​​​​​​​​​board[i][j] =0; ​​​​​​​​​​​​​​​​System.out.println(get); ​​​​​​​​​​​​​​​​return get; ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return 0; ​​​​} }

 

마지막의 return 값은 없어진게 한쌍씩(2개) 없어지므로 answer*2를 해주었다.

 

추가적으로, 시도했던 Queue를 배열형으로 만들고싶어서 시도해봤는데..

Queue<Integer>[] qArray = new Integer[4]; 이런식으로 선언하는것은 없나보다.

 

 

 

 

다른사람의 풀이) 

import java.util.Stack; class Solution { ​​​​public int solution(int[][] board, int[] moves) { ​​​​​​​​int answer = 0; ​​​​​​​​Stack<Integer> stack = new Stack<>(); ​​​​​​​​for (int move : moves) { ​​​​​​​​​​​​for (int j = 0; j < board.length; j++) { ​​​​​​​​​​​​​​​​if (board[j][move - 1] != 0) { ​​​​​​​​​​​​​​​​​​​​if (stack.isEmpty()) { ​​​​​​​​​​​​​​​​​​​​​​​​stack.push(board[j][move - 1]); ​​​​​​​​​​​​​​​​​​​​​​​​board[j][move - 1] = 0; ​​​​​​​​​​​​​​​​​​​​​​​​break; ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​​​​​if (board[j][move - 1] == stack.peek()) { ​​​​​​​​​​​​​​​​​​​​​​​​stack.pop(); ​​​​​​​​​​​​​​​​​​​​​​​​answer += 2; ​​​​​​​​​​​​​​​​​​​​} else ​​​​​​​​​​​​​​​​​​​​​​​​stack.push(board[j][move - 1]); ​​​​​​​​​​​​​​​​​​​​board[j][move - 1] = 0; ​​​​​​​​​​​​​​​​​​​​break; ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​} ​​​​​​​​} ​​​​​​​​return answer; ​​​​} }
반응형

'코딩테스트 > Java' 카테고리의 다른 글

(2019 카카오) 키패드 누르기 Java  (0) 2020.12.23
(2019 카카오) 실패율 Java  (0) 2020.12.21
[JAVA] 백준 "단지번호붙이기"  (0) 2020.12.03
[JAVA] 백준 "바이러스"  (0) 2020.12.03
[JAVA] 백준 "DFS와 BFS"  (0) 2020.12.02