본문 바로가기
백준 풀이

[백준/BOJ] - 2839번 python 풀이 - Greedy algorithm

by 반오십 코린이 2022. 11. 21.
728x90


Key Point

Case 1: 5로 전부 나눠질 경우

Case 2: 3으로 전부 나눠질 경우

Case 3: 3과 5가 섞여서 나눠질 경우

Case 4: 나눠지지 않을 경우


맨 처음 5로 나눠지는 경우부터 처리

 

while 문에서 해당 조건문은 일단 맨처음 5로 나눈 몫을 통해 (전체 N에서 몫*5의값을 빼고) 그 값을 3으로 나눴을 때 나눠지면 깔끔하게 나눠지는 것으로 간주.

순차적으로 5로 나누었을 때 몫의 값을 1씩 빼며 3으로 나눠지는지 확인하는 로직이다.

if (N - numb*5) % 3 != 0:

1. 해당 조건문이 0이 될 경우

5kg와 3kg의 콜라보 가능 or 3kg 봉지로만 표현 가능

 

2. numb의 값(5로 나눴을 때 값)이 0이 될 때까지 3으로 나눠지지 않을 경우

print(-1)


import sys
N = int(sys.stdin.readline())
num1 = N % 5
numb = N // 5
if num1 == 0: #5로 나눴을 때
    print(N // 5)
    exit(0)

while True:
    if (N - numb*5) % 3 != 0:
        if numb == 0: #나눠지지 않을 경우
            print(-1)
            break
        elif numb != 0: #3으로 나눠지지 않을 때 몫-1(numb-1) 하면서 3으로 나눠지는지 확인한다.
            numb-=1
    else:
        print(numb + (N - (numb*5)) // 3) #3,5 섞여서 나눠질 경우 or 3으로만 나눠질 경우
        break
728x90