Skip to content

Commit c4fc702

Browse files
committed
[level 1] Title: 택배 상자 꺼내기, Time: 0.08 ms, Memory: 9.21 MB -BaekjoonHub
1 parent 32c6285 commit c4fc702

File tree

2 files changed

+145
-0
lines changed

2 files changed

+145
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# [level 1] 택배 상자 꺼내기 - 389478
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/389478)
4+
5+
### 성능 요약
6+
7+
메모리: 9.21 MB, 시간: 0.08 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 2025 프로그래머스 코드챌린지 2차 예선
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 04월 28일 16:35:27
20+
21+
### 문제 설명
22+
23+
<p>1 ~ <code>n</code>의 번호가 있는 택배 상자가 창고에 있습니다. 당신은 택배 상자들을 다음과 같이 정리했습니다.</p>
24+
25+
<p>왼쪽에서 오른쪽으로 가면서 1번 상자부터 번호 순서대로 택배 상자를 한 개씩 놓습니다. 가로로 택배 상자를 <code>w</code>개 놓았다면 이번에는 오른쪽에서 왼쪽으로 가면서 그 위층에 택배 상자를 한 개씩 놓습니다. 그 층에 상자를 <code>w</code>개 놓아 가장 왼쪽으로 돌아왔다면 또다시 왼쪽에서 오른쪽으로 가면서 그 위층에 상자를 놓습니다. 이러한 방식으로 <code>n</code>개의 택배 상자를 모두 놓을 때까지 한 층에 <code>w</code>개씩 상자를 쌓습니다.</p>
26+
27+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/e06b4c0d-0ce6-4a2d-8ad4-ba20f9398145/ex1-1.png" title="" alt="ex1-1.png"></p>
28+
29+
<ul>
30+
<li>위 그림은 <code>w</code> = 6일 때 택배 상자 22개를 쌓은 예시입니다.</li>
31+
</ul>
32+
33+
<p>다음 날 손님은 자신의 택배를 찾으러 창고에 왔습니다. 당신은 손님이 자신의 택배 상자 번호를 말하면 해당 택배 상자를 꺼내줍니다. 택배 상자 A를 꺼내려면 먼저 A 위에 있는 다른 모든 상자를 꺼내야 A를 꺼낼 수 있습니다. 예를 들어, 위 그림에서 8번 상자를 꺼내려면 먼저 20번, 17번 상자를 꺼내야 합니다.</p>
34+
35+
<p>당신은 꺼내려는 상자 번호가 주어졌을 때, 꺼내려는 상자를 포함해 총 몇 개의 택배 상자를 꺼내야 하는지 알고 싶습니다.</p>
36+
37+
<p>창고에 있는 택배 상자의 개수를 나타내는 정수 <code>n</code>, 가로로 놓는 상자의 개수를 나타내는 정수 <code>w</code>와 꺼내려는 택배 상자의 번호를 나타내는 정수 <code>num</code>이 매개변수로 주어집니다. 이때, 꺼내야 하는 상자의 총개수를 return 하도록 solution 함수를 완성해 주세요.</p>
38+
39+
<hr>
40+
41+
<h5>제한사항</h5>
42+
43+
<ul>
44+
<li>2 ≤ <code>n</code> ≤ 100</li>
45+
<li>1 ≤ <code>w</code> ≤ 10</li>
46+
<li>1 ≤ <code>num</code> ≤ <code>n</code></li>
47+
</ul>
48+
49+
<hr>
50+
51+
<h5>테스트 케이스 구성 안내</h5>
52+
53+
<p>아래는 테스트 케이스 구성을 나타냅니다. 각 그룹 내의 테스트 케이스를 모두 통과하면 해당 그룹에 할당된 점수를 획득할 수 있습니다.</p>
54+
<table class="table">
55+
<thead><tr>
56+
<th>그룹</th>
57+
<th>총점</th>
58+
<th>추가 제한 사항</th>
59+
</tr>
60+
</thead>
61+
<tbody><tr>
62+
<td>#1</td>
63+
<td>10%</td>
64+
<td><code>w</code> = 1</td>
65+
</tr>
66+
<tr>
67+
<td>#2</td>
68+
<td>20%</td>
69+
<td><code>n</code>은 <code>w</code>의 배수입니다.</td>
70+
</tr>
71+
<tr>
72+
<td>#3</td>
73+
<td>70%</td>
74+
<td>추가 제한 사항 없음</td>
75+
</tr>
76+
</tbody>
77+
</table>
78+
<hr>
79+
80+
<h5>입출력 예</h5>
81+
<table class="table">
82+
<thead><tr>
83+
<th>n</th>
84+
<th>w</th>
85+
<th>num</th>
86+
<th>result</th>
87+
</tr>
88+
</thead>
89+
<tbody><tr>
90+
<td>22</td>
91+
<td>6</td>
92+
<td>8</td>
93+
<td>3</td>
94+
</tr>
95+
<tr>
96+
<td>13</td>
97+
<td>3</td>
98+
<td>6</td>
99+
<td>4</td>
100+
</tr>
101+
</tbody>
102+
</table>
103+
<hr>
104+
105+
<h5>입출력 예 설명</h5>
106+
107+
<p><strong>입출력 예 #1</strong></p>
108+
109+
<p>문제 예시와 같습니다. 꺼내야 하는 상자의 총개수는 8번 상자를 포함해 3개입니다.</p>
110+
111+
<p><strong>입출력 예 #2</strong></p>
112+
113+
<p><img src="https://grepp-programmers.s3.ap-northeast-2.amazonaws.com/files/production/cb4cf30d-2313-40ff-8366-86841f603ae6/ex2-1.png" title="" alt="ex2-1.png"></p>
114+
115+
<p>6번 상자를 꺼내려면 먼저 13, 12, 7번 상자를 꺼내야 합니다.<br>
116+
따라서 4를 return 합니다.</p>
117+
118+
119+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def solution(n, w, num):
2+
if (n / w) + 0.5 > n//w:
3+
A = n//w + 1
4+
else:
5+
A = n//w
6+
palette = [[0] * w for _ in range(A)]
7+
8+
for i in range(n):
9+
palette[i//w][i%w] = i+1
10+
11+
for i in range(A):
12+
if i % 2 != 0:
13+
palette[i].reverse()
14+
15+
for i in range(A):
16+
for j in range(w):
17+
if palette[i][j] == num:
18+
x = i
19+
y = j
20+
21+
cnt = 0
22+
for i in range(A):
23+
now = palette.pop()
24+
if now[y] >= num:
25+
cnt += 1
26+
return cnt

0 commit comments

Comments
 (0)