문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
1. 상자를 쌓기 위한 높이 계산
- 모듈러 연산 후 나머지가 있으면 한 줄 더 쌓아야 하므로 +1을 추가
2. 배열 채우기
- 최종 상자의 개수 n이 될 때까지 배열을 채운다.
- n보다 커지면 0으로 유지 → 상자를 꺼낼 때 연산하기 쉽게 하기 위함
- 짝수 번째 줄은 반대로 쌓아야 하므로 reverse() 함수 사용
3. 상자 꺼내기
- 맨 윗칸이 비어 있으면 동작이 한 번 덜 수행되므로 -1
- 즉, 맨 윗칸이 0이면 비어 있는 것
- 맨 윗칸이 0이 아니면 비어 있지 않으므로
→ 전체 높이에서 상자가 있는 열의 크기를 빼준다.
코드
def solution(n, w, num):
answer = 0
height = 0
# 세로 크기 구하기
if n % w == 0:
height = n // w
else:
height = n // w + 1
ware_house = [[0] * w for _ in range(height)]
# 상자 넣기
box = 1
for i in range(height):
for j in range(w):
if box > n:
break
ware_house[i][j] = box
box += 1
for i in range(height):
if i % 2 != 0:
ware_house[i].reverse()
for i in range(height):
for j in range(w):
if ware_house[i][j] == num:
if ware_house[height - 1][j] != 0:
answer = height - i
else:
answer = height - i - 1
return answer
다른 사람의 풀이
✅ 상자를 꺼낼 때 현재 행에서 맨 아래까지 내려가며 몇 번 연산이 필요한지 확인할 수 있다.
for i in range(len(storage)):
for j in range(len(storage[0])):
if storage[i][j] == num:
d = i
while d < h and storage[d][j]: # 꺼낼 박스가 있으면
answer += 1
d += 1 # 아래로 내려감
'Algorithm > Simulation' 카테고리의 다른 글
| [PCCP 기출문제] 3번 / 충돌위험 찾기 (1) | 2025.04.14 |
|---|---|
| [Python] 프로그래머스 PCCP 기출문제 1번 / 동영상 재생기 (0) | 2025.03.17 |
| [Python] 백준 31649번 Milk Exchange (4) | 2024.10.12 |
| [Python] 백준 14719번 빗물 (4) | 2024.10.04 |
| [Python] 프로그래머스 최댓값과 최솟값 (0) | 2024.07.24 |