문제

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 차원 배열로 이루어진 인형 뽑기 기계에서 인형을 뽑기

뽑은 인형은 내 보관함에 저장되며, 저장된 인형이 2 연속 같다면 제거한다.

해당 위치에 인형이 없다면 아무일도 하지 않는다.

 

제거된 인형 수를 리턴하도록 구현

 

[제한사항]

  • board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

 


코드

import java.util.Deque;
import java.util.LinkedList;
//크레인 인형뽑기 게임
class Solution7 {
	/*편의상 변수로 둔 것*/
	static Deque<Integer> deque = new LinkedList<>();
	static int count = 0;
	static int move = 0;
	static int[][] board = new int[][] {{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}};
	static int[] moves = new int[] {1,5,3,5,1,2,1,4};
	
	/* 제출 시 콘솔 출력 부분 제거 or 주석 */
	public static void main(String[] args) {
		Solution7 s = new Solution7();
		s.solution(board, moves);
		
		System.out.println("제거된 인형 "+count);
	}
	
	
	public int solution(int[][] board, int[] moves) {
		
		print();
		for(int i=0;i<moves.length;i++) {
			System.out.println("인형뽑기 [" + moves[i] +"] 위치 " );
			get(moves[i]-1 );  // 인덱스 값 보정을 위해 -1
			System.out.println();
			print();
		}
		return count;
	}
	
	// 원하는 인형을 집는다.
	public void get(Integer select) {
		for (int hei = 0; hei< board.length ; hei++) {
			int value = board[hei][select] ;
			System.out.println("인형 찾기... board["+hei+"]["+select+"]"  + (value != 0 ? " 인형 찾음!!" : " 인형 없음"));
			if(value != 0) {
				board[hei][select] = 0;
				add(value);
				return;
			}
			
		}
	}
	
	// 마지막으로 저장한 값과 저장할 값이 같다면 저장하지 않는다.
	public boolean add(Integer num) {
		if(deque.size()!=0 && deque.peekLast().intValue() ==  num.intValue()) {
			System.out.println("제거 = "+deque.peekLast()+","+num);
			deque.pollLast(); // 요소를 꺼냄과 동시에 제거를 해준다.
			count += 2; // 제거한 수 만큼 증가시킨다.
			System.out.println("인형보관함 " + deque);
			return false;
		}
		deque.add(num);
		System.out.println("인형보관함 " + deque);
		return true;
	}
	
	/*출력용 메서드 */
	private void print() {
		for(int i=0;i<board.length;i++) {
			System.out.print("[");
			for(int j=0;j<board[i].length;j++) {
				System.out.print(board[i][j] +( j== board[i].length-1? "" : ", "));
			}
			System.out.println("]");
		}
	}
}

결과

[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] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 찾음!!
인형보관함 [4]

[0, 0, 0, 0, 0]
[0, 0, 1, 0, 3]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [5] 위치 
인형 찾기... board[0][4] 인형 없음
인형 찾기... board[1][4] 인형 찾음!!
인형보관함 [4, 3]

[0, 0, 0, 0, 0]
[0, 0, 1, 0, 0]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [3] 위치 
인형 찾기... board[0][2] 인형 없음
인형 찾기... board[1][2] 인형 찾음!!
인형보관함 [4, 3, 1]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 1]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [5] 위치 
인형 찾기... board[0][4] 인형 없음
인형 찾기... board[1][4] 인형 없음
인형 찾기... board[2][4] 인형 찾음!!
제거 = 1,1
인형보관함 [4, 3]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 0]
[0, 2, 4, 4, 2]
[3, 5, 1, 3, 1]
인형뽑기 [1] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 없음
인형 찾기... board[4][0] 인형 찾음!!
제거 = 3,3
인형보관함 [4]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 2, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [2] 위치 
인형 찾기... board[0][1] 인형 없음
인형 찾기... board[1][1] 인형 없음
인형 찾기... board[2][1] 인형 찾음!!
인형보관함 [4, 2]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [1] 위치 
인형 찾기... board[0][0] 인형 없음
인형 찾기... board[1][0] 인형 없음
인형 찾기... board[2][0] 인형 없음
인형 찾기... board[3][0] 인형 없음
인형 찾기... board[4][0] 인형 없음

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 4, 2]
[0, 5, 1, 3, 1]
인형뽑기 [4] 위치 
인형 찾기... board[0][3] 인형 없음
인형 찾기... board[1][3] 인형 없음
인형 찾기... board[2][3] 인형 없음
인형 찾기... board[3][3] 인형 찾음!!
인형보관함 [4, 2, 4]

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 5, 0, 0]
[0, 2, 4, 0, 2]
[0, 5, 1, 3, 1]
제거된 인형 4

 


 

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

성격 유형 검사하기  (0) 2022.09.26
신고 결과 받기  (0) 2022.09.24
올바른 괄호  (1) 2022.09.23
신규 아이디 추천  (0) 2022.09.18
성격 유형 검사하기  (0) 2022.09.17

+ Recent posts