Skip to content

Commit 2fafdde

Browse files
committed
[Silver III] Title: 눈 치우기, Time: 32 ms, Memory: 31120 KB -BaekjoonHub
1 parent a888fd2 commit 2fafdde

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Silver III] 눈 치우기 - 26215
2+
3+
[문제 링크](https://www.acmicpc.net/problem/26215)
4+
5+
### 성능 요약
6+
7+
메모리: 31120 KB, 시간: 32 ms
8+
9+
### 분류
10+
11+
그리디 알고리즘, 구현, 시뮬레이션, 정렬
12+
13+
### 제출 일자
14+
15+
2024년 9월 17일 01:26:21
16+
17+
### 문제 설명
18+
19+
<p>지난 밤 겨울 숲에는 눈이 많이 내렸다. 당신은 숲의 주민들을 위해 눈이 오지 않는 동안 모든 집 앞의 눈을 치우고자 한다.</p>
20+
21+
<p>당신은 1분에 한 번씩 두 집을 선택해서 두 집 앞의 눈을 각각 1만큼 치우거나, 한 집을 선택해서 그 집 앞의 눈을 1만큼 치울 수 있다.</p>
22+
23+
<p>모든 집 앞의 눈을 전부 치울 때까지 걸리는 최소 시간은 얼마일까?</p>
24+
25+
### 입력
26+
27+
<p>첫 줄에 집의 수를 의미하는 정수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$N$</span></mjx-container> (<mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mn class="mjx-n"><mjx-c class="mjx-c31"></mjx-c></mjx-mn><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mi class="mjx-i" space="4"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mn class="mjx-n" space="4"><mjx-c class="mjx-c31"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>≤</mo><mi>N</mi><mo>≤</mo><mn>100</mn></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$1 \leq N \leq 100$</span></mjx-container>)이 주어진다.</p>
28+
29+
<p>다음 줄에는 각각의 집 앞에 쌓여 있는 눈의 양을 나타내는 정수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-msub><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D44E TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-texatom size="s" texclass="ORD"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-texatom></mjx-script></mjx-msub></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>a</mi><mrow data-mjx-texclass="ORD"><mi>i</mi></mrow></msub></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$a_{i}$</span></mjx-container> (<mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mn class="mjx-n"><mjx-c class="mjx-c31"></mjx-c></mjx-mn><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-msub space="4"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D44E TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-texatom size="s" texclass="ORD"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-texatom></mjx-script></mjx-msub><mjx-mo class="mjx-n" space="4"><mjx-c class="mjx-c2264"></mjx-c></mjx-mo><mjx-mn class="mjx-n" space="4"><mjx-c class="mjx-c32"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn><mo>≤</mo><msub><mi>a</mi><mrow data-mjx-texclass="ORD"><mi>i</mi></mrow></msub><mo>≤</mo><mn>2000</mn></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">$1 \leq a_{i} \leq 2000$</span></mjx-container>)이 주어진다.</p>
30+
31+
### 출력
32+
33+
<p>모든 집 앞의 눈을 치우는 데 최소 몇 분이 걸리는지를 출력한다. 24시간(1440분)이 넘게 걸릴 경우 -1을 출력한다.</p>
34+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""
2+
[시도1]
3+
- 오름차순 정렬 후 그리디
4+
- 마지막 2개 항상 치우기(값-1) / (0 되면 pop)
5+
- 한개 남으면 마찬가지
6+
- 혹시 times 혹은 item_time > 1440 이면, break
7+
"""
8+
9+
import sys
10+
readline = lambda: sys.stdin.readline().strip()
11+
12+
# 전처리
13+
n = int(readline())
14+
houses = list(map(int, readline().split()))
15+
houses.sort()
16+
17+
18+
LIMIT_TIME = 1440
19+
times = 0
20+
while True:
21+
if times > LIMIT_TIME:
22+
print(-1)
23+
break
24+
if len(houses) == 0:
25+
print(times)
26+
break
27+
if len(houses) == 1:
28+
times += houses[-1]
29+
if times > LIMIT_TIME:
30+
print(-1)
31+
else:
32+
print(times)
33+
break
34+
else:
35+
times += 1
36+
houses[-1] -= 1
37+
houses[-2] -= 1
38+
39+
if houses[-2] == 0:
40+
last_item = houses.pop()
41+
houses.pop()
42+
if last_item > 0:
43+
houses.append(last_item)
44+
houses.sort() # 다시 정렬

0 commit comments

Comments
 (0)