문제
알고리즘
- 모든 나무의 합을 3으로 나누었을 때 0이 되지 않으면 물 뿌리개를 통해 만들 수 없는 나무의 높이인 것이다.
- 반복문을 통해 2의 물 뿌리개의 횟수를 구한다.
- 2의 물 뿌리개 횟수가 3으로 물을 뿌린 횟수보다 크다면 원하는 높이의 나무를 만들 수 있다.
- 1의 물 뿌리개 횟수는 이미 이전에 3으로 나누어진 나무들이기 때문에 자동으로 뿌려진다.
코드
import sys
n = int(sys.stdin.readline())
h = list(map(int, sys.stdin.readline().split()))
a, b = divmod(sum(h), 3) # 몫, 나머지
cnt = 0
# 모든 나무의 합을 3으로 나누었을 때 0이 되지 않으면
# 물뿌리개를 통해 만들 수 없는 높이인 것이다.
if b == 0:
# 반복문을 통해 2의 물뿌리개의 횟수를 구한다.
for i in h:
cnt += i // 2
# 2의 물뿌리개의 횟수가 3으로 물을 뿌린 횟수보다 크다면
# 원하는 높이의 나무를 만들 수 있다.
if cnt >= a:
print("YES")
else:
print("NO")
else:
print("NO")
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 10819번(파이썬): 차이를 최대로 (0) | 2022.04.25 |
---|---|
[baekjoon] 백준 18428번(파이썬): 감시 피하기 (2) | 2022.04.23 |
[baekjoon] 백준 16198번(파이썬): 에너지 모으기 (0) | 2022.04.21 |
[baekjoon] 백준 13335번(파이썬): 트럭 (0) | 2022.04.20 |
[baekjoon] 백준 17615번(파이썬): 볼 모으기 (1) | 2022.04.19 |