티스토리 뷰
728x90
https://www.acmicpc.net/problem/2785
- 해설 :
희원이는 그의 다락방에서 N개의 체인을 찾았다. 각각의 체인은 몇 개의 고리로 연결되어 있는데, 각각의 고리는 최대 두 개의 인접한 고리를 가질 수 있다. 각각의 고리는 열고 닫을 수 있다. 그래서, 체인을 분리하거나 두 체인을 연결하여 하나의 긴 체인으로 만들 수 있다. 희원이는 가능한 한 적은 고리를 열고 닫아서, 모든 체인을 하나의 긴 체인으로 연결하려고 한다.
예를 들어, 희원이가 세 개의 체인을 가지고 있고, 각 체인이 고리 하나로만 이루어져 있다면, 그 중 하나를 열어서 나머지 두 개를 연결하고 닫으면 된다.
체인의 개수와 각각의 체인의 길이가 주어지면, 하나의 긴 체인으로 모든 체인을 묶기 위해 희원이가 열고 닫아야할 최소한의 고리 수를 찾아라.
- 풀이 :
오름차순으로 정렬된 체인을 두 개씩 묶어서 모든 체인을 묶을 수 있는 경우를 찾으면 된다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import sys
from collections import deque
input = sys.stdin.readline
if __name__ == "__main__":
N = int(input())
chain = deque(sorted(list(map(int,input().split()))))
ans = 0
while True:
chain[0] -= 1
ans += 1
x = chain.pop()
y = chain.pop()
chain.append(x+y)
if chain[0] == 0:
chain.popleft()
if len(chain) == 1:
break
print(ans)
|
cs |
320x100
'Algorithm > Greedy' 카테고리의 다른 글
(Python) - BOJ(5545번) : 최고의 피자 (0) | 2022.02.03 |
---|---|
(Python) - BOJ(2891번) : 카약과 강풍 (0) | 2022.02.01 |
(Python) - BOJ(2217번) : 로프 (0) | 2022.01.30 |
(Python) - BOJ(1946번) : 신입 사원 (0) | 2022.01.29 |
(Python) - BOJ(1931번) : 회의실 배정 (0) | 2022.01.28 |
댓글
© 2022 WonSeok, All rights reserved