Algorithm/Beakjoon

[Beakjoon] 백준 12981번 Python

sbs1621 2022. 7. 1. 18:00
Beakjoon 12981, 공 포장하기
solved.ac Silver5
Greedy 알고리즘

문제

빨간 공 R개, 초록 공 G개, 파란 공 B개를 가지고 있다.

오늘은 이 공을 박스로 포장하려고 한다. 박스에는 공이 1개, 2개, 또는 3개 들어갈 수 있다.

박스에 들어가는 공의 색은 모두 다르거나, 모두 같아야 한다.

필요한 박스 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 R, G, B가 주어진다. (1 ≤ R, G, B ≤ 100)

출력

첫째 줄에 필요한 박스 개수의 최솟값을 출력한다.

Solution

R, G, B = map(int, input().split())


count = R // 3 + G // 3 + B // 3
while True:
    if R % 3 == 0 and G % 3 == 0 and B % 3 == 0:
        break

    if R % 3 > 0 and G % 3 > 0 and B % 3 > 0:
        R -= 1
        G -= 1
        B -= 1
        count += 1

    if R % 3 == 0:
        if G % 3 == 0 and B % 3 != 0:
            count += 1
            break
        if B % 3 == 0 and G % 3 != 0:
            count += 1
            break
        if G % 3 != 0 and B % 3 != 0:
            if G % 3 == 1 and B % 3 == 1:    
                count += 1
            else:
                count += 2
            break

    elif G % 3 == 0:
        if R % 3 == 0 and B % 3 != 0:
            count += 1
            break
        if B % 3 == 0 and R % 3 != 0:
            count += 1
            break
        if R % 3 != 0 and B % 3 != 0:
            if R % 3 == 1 and B % 3 == 1:    
                count += 1
            else:
                count += 2
            break

    elif B % 3 == 0:
        if R % 3 == 0 and G % 3 != 0:
            count += 1
            break
        if G % 3 == 0 and R % 3 != 0:
            count += 1
            break
        if R % 3 != 0 and G % 3 != 0:
            if R % 3 == 1 and G % 3 == 1:    
                count += 1
            else:
                count += 2
            break

print(count)

풀이

R, G, B 세 값을 입력받고 그 수를 3으로 나눈 몫과 나머지를 구합니다. 모든 몫은 count에 더해주고 나머지를 비교하여 count에 더해줍니다.

  • R, G, B 세 값의 나머지가 모두 0보다 큰 경우 한 상자에 한 개씩 담아 R, G, B - 1을 한 다음 count를 하나 추가하는 것을 반복합니다.
  • 셋 중 하나의 나머지가 0일 경우 두 수를 비교하여 나머지가 1, 1 인경우 같은 상자에 담아 상자의 수를 최소로 하고 그렇지 않은 경우에는 같은 상자에 담지 못하기 때문에 서로 다른 상자에 담아줍니다.
  • 셋 중 두 개의 나머지가 0일 경우 한 상자에 담아줍니다.

 

12981번: 공 포장하기

첫째 줄에 R, G, B가 주어진다. (1 ≤ R, G, B ≤ 100)

www.acmicpc.net