CodingTest/Baekjoon

[baekjoon] 백준 19539번(파이썬): 사과나무

JunJangE 2022. 4. 22. 01:21

문제

 

19539번: 사과나무

첫 번째 줄에 모든 나무가 갊자가 바라는 높이가 되도록 물뿌리개를 통해 만들 수 있으면 “YES”를, 아니면 “NO”를 따옴표를 제외하고 출력한다.

www.acmicpc.net

알고리즘

- 모든 나무의 합을 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

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com