Skip to content

Commit 7227675

Browse files
committed
[level 1] Title: 크레인 인형뽑기 게임, Time: 0.96 ms, Memory: 16.5 MB -BaekjoonHub
1 parent 0ba1d7a commit 7227675

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# [level 1] 크레인 인형뽑기 게임 - 64061
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/64061)
4+
5+
### 성능 요약
6+
7+
메모리: 16.5 MB, 시간: 0.96 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2019 카카오 개발자 겨울 인턴십
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 10월 10일 23:54:52
20+
21+
### 문제 설명
22+
23+
<p>게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.<br>
24+
"죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.</p>
25+
26+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/69f1cd36-09f4-4435-8363-b71a650f7448/crane_game_101.png" title="" alt="crane_game_101.png"></p>
27+
28+
<p>게임 화면은 <strong>"1 x 1"</strong> 크기의 칸들로 이루어진 <strong>"N x N"</strong> 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 <strong>격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다.</strong> 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.</p>
29+
30+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/638e2162-b1e4-4bbb-b0d7-62d31e97d75c/crane_game_102.png" title="" alt="crane_game_102.png"></p>
31+
32+
<p>만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 <strong>두 개</strong>가 없어집니다.</p>
33+
34+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/8569d736-091e-4771-b2d3-7a6e95a20c22/crane_game_103.gif" title="" alt="crane_game_103.gif"></p>
35+
36+
<p>크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)</p>
37+
38+
<p>게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.</p>
39+
40+
<h5><strong>[제한사항]</strong></h5>
41+
42+
<ul>
43+
<li>board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.</li>
44+
<li>board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
45+
46+
<ul>
47+
<li>0은 빈 칸을 나타냅니다.</li>
48+
<li>1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.</li>
49+
</ul></li>
50+
<li>moves 배열의 크기는 1 이상 1,000 이하입니다.</li>
51+
<li>moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.</li>
52+
</ul>
53+
54+
<h5><strong>입출력 예</strong></h5>
55+
<table class="table">
56+
<thead><tr>
57+
<th>board</th>
58+
<th>moves</th>
59+
<th>result</th>
60+
</tr>
61+
</thead>
62+
<tbody><tr>
63+
<td>[[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]]</td>
64+
<td>[1,5,3,5,1,2,1,4]</td>
65+
<td>4</td>
66+
</tr>
67+
</tbody>
68+
</table>
69+
<h5><strong>입출력 예에 대한 설명</strong></h5>
70+
71+
<p><strong>입출력 예 #1</strong></p>
72+
73+
<p>인형의 처음 상태는 문제에 주어진 예시와 같습니다. 크레인이 [1, 5, 3, 5, 1, 2, 1, 4] 번 위치에서 차례대로 인형을 집어서 바구니에 옮겨 담은 후, 상태는 아래 그림과 같으며 바구니에 담는 과정에서 터트려져 사라진 인형은 4개 입니다.</p>
74+
75+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/bb0f59c7-6b72-485a-8302-217fe53ea88f/crane_game_104.jpg" title="" alt="crane_game_104.jpg"></p>
76+
77+
78+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import Foundation
2+
3+
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
4+
var answer = 0
5+
var gameBoard = board
6+
var basket: [Int] = []
7+
8+
for move in moves {
9+
let columnIndex = move - 1
10+
11+
for rowIndex in 0..<gameBoard.count {
12+
let doll = gameBoard[rowIndex][columnIndex]
13+
14+
if doll != 0 { // 해당 위치가 비어있지 않은 경우(인형이 있을 때)
15+
if basket.last == doll {
16+
basket.popLast()
17+
answer += 2
18+
} else {
19+
basket.append(doll)
20+
}
21+
22+
gameBoard[rowIndex][columnIndex] = 0
23+
24+
break
25+
}
26+
}
27+
}
28+
29+
return answer
30+
}

0 commit comments

Comments
 (0)