빨간 공 R개
초록 공 G개
파란 공 B개를 가지고 있다.
이 공들을 박스로 포장하려고 한다.
박스에는 1개, 2개, 또는 3개의 공이 들어갈 수 있다.
박스에 들어가는 공의 색은 모두 다르거나, 모두 같아야 한다.
필요한 박스 개수의 최솟값을 구한다.
초기 접근
예를 들어 빨 4, 초 2, 파 4가 있다고 가정하자.
우선 박스의 개수가 최소가 되어야 하니, 3개짜리 박스가 많을 수록 좋다.
3개를 담아보면 빨 3, 파 3을 담아 2박스가 생기고
빨 1 초 2 파 1 이 남는다.
또, 여기서 빨초파를 하나씩 담아서 3개짜리 박스를 하나 더 만들 수 있다.
이때 3개짜리 박스를 무조건 많이 만드는게 유리한가에 대해 생각해볼 필요가 있다.
그런데 박스의 개수가 적어야하니, 3개짜리가 많을 수록 유리한것이 맞다.
222라면
111
111이렇게 두박스
123
111
012
3 1 2
202
처음에 박스를 구성 조건을 무엇으로 같은색으로 잡든 다른색으로 잡든 같은것같다.
1. 3이상인 숫자가 있으면 거기서 3을 뺄수 없을때까지 3을 뺀다.
한번뺄때마다 박스수를 +1한다.
2. r,g,b중 하나라도 0이 나올때까지 1씩 뺀다.
한번뺄때마다 박스수를 +1한다.
3. 0이 아닌 수가 남아있다면 한 박스에 다 넣는다.
R, G, B = map(int, input().split())
box=0
def minusThree(r):
while r>2:
box+=1
def isZero(r):
if r>0:
box+=1
minusThree(r)
minusThree(g)
minusThree(b)
while r==0 or g==0 or b==0:
r-=1
g-=1
b-=1
box+=1
isZero(r)
isZero(g)
isZero(b)
print(box)
출처 : https://sbs1621.tistory.com/29
R, G, B = map(int, input().split())
#같은 색깔의 공들을 3개씩 묶어서 나오는 박스의 수
count = R // 3 + G // 3 + B // 3
#r,g,b에 대해 한가지색 만 남아있는 경우
#두가지색이 남아있는 경우
#세가지 색이 남아 있는 경우
#남아있지 않는 경우
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
#두가지 색 또는 한가지 색만 남은 경우
#두가지색 또는 한가지색이 g,b일 경우
if R % 3 == 0:
#한가지 색 b
if G % 3 == 0 and B % 3 != 0:
count += 1
break
#한가지색 g
if B % 3 == 0 and G % 3 != 0:
count += 1
break
#두가지 색 g,b
if G % 3 != 0 and B % 3 != 0:
if G % 3 == 1 and B % 3 == 1:
count += 1
else:
count += 2
break
#두가지색 또는 한가지색이 r,b일 경우
elif G % 3 == 0:
#한가지색, b
if R % 3 == 0 and B % 3 != 0:
count += 1
break
#한가지색, r
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
#두가지색 또는 한가지색이 r,g일 경우
elif B % 3 == 0:
#한가지색 g
if R % 3 == 0 and G % 3 != 0:
count += 1
break
#한가지색 r
if G % 3 == 0 and R % 3 != 0:
count += 1
break
#두가지색 r,g
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 = map(int, input().split())
#같은 색깔의 공들을 3개씩 묶어서 나오는 박스의 수
count = R // 3 + G // 3 + B // 3
#r,g,b에 대해 한가지색 만 남아있는 경우
#두가지색이 남아있는 경우
#세가지 색이 남아 있는 경우
#남아있지 않는 경우
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
#두가지 색 또는 한가지 색만 남은 경우
#두가지색 또는 한가지색이 g,b일 경우
if R % 3 == 0:
#한가지 색 b
if G % 3 == 0 and B % 3 != 0:
count += 1
break
#한가지색 g
if B % 3 == 0 and G % 3 != 0:
count += 1
break
#두가지 색 g,b
if G % 3 != 0 and B % 3 != 0:
if G % 3 == 1 and B % 3 == 1:
count += 1
else:
count += 2
break
#두가지색 또는 한가지색이 r,b일 경우
elif G % 3 == 0:
#한가지색, r
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
#두가지색 또는 한가지색이 r,g일 경우
elif B % 3 == 0:
#두가지색 r,g
if R % 3 != 0 and G % 3 != 0:
if R % 3 == 1 and G % 3 == 1:
count += 1
else:
count += 2
break
print(count)