백준 알고리즘 3213

은영·2024년 6월 26일
0

백준 알고리즘 공부

목록 보기
25/26

이 문제의 관건은 피자 조각의 크기다.
만약에 1/2개를 먹는 친구 1명과 3/4개를 먹는 친구 2명이 있다면 숫자를 다 더했을 때는 0.5+0.75+0.75=2.0이므로 2판을 먹어도 충분하다. 하지만 실제로 피자를 1/2 모양으로 잘랐을 때 남은 피자 조각은 1/2, 반원 모양이므로 3/4조각의 피자를 먹는 친구가 먹을 수 없어 새로운 피자를 먹어야 한다. 이 점을 이용해야 한다.

1/2 + 1/4 2
1/2
2
1/4 + 3/4
1/4 3
1/4
2 + 1/2

위와 같은 조건으로 먹을 때만 1판을 먹는 것이며 이외의 조합은 새로운 1판을 더 꺼내 먹어야 한다는 것이다.

그렇다면 입력으로 받는 조각들의 개수를 세서 위 조건에 맞는 경우 피자 개수로 하나씩 카운트 해 피자 개수를 잰다.

N = int(input())
pizza = [ eval(input()) for _ in range(N) ]

quarter = pizza.count(0.25)
half = pizza.count(0.5)
three_quarters = pizza.count(0.75)

ans = 0

#3/4조각 1/4조각 하나 합치기
min_3q_1q = min(three_quarters, quarter)
ans += min_3q_1q
three_quarters -= min_3q_1q
quarter -= min_3q_1q

#남은 3/4 조각은 피자 하나

ans += three_quarters
three_quarters = 0

#1/2조각 2개 하나의 피자
ans += half // 2
half %= 2

#남은 1/2조각과 1/4조각 두 개 하나 피자로 합치
if half == 1:
  if quarter >= 2:
    ans += 1
    quarter -= 2
  else: # 1/2조각과 1/4조각이 각각 하나씩 남은 경우
    ans += 1
    quarter = 0

#남은 1/4 조각 네 개를 하나의 피자로 합치기
ans += quarter // 4
if quarter %4 != 0:
  ans += 1

print(ans)

0개의 댓글

관련 채용 정보