문제
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 |