본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 3213번 피자

by 현장 2026. 3. 9.

-Code

import java.io.*;
import java.util.*;

public class BOJ3213 {
    static Map<String, Integer> pizzaSizeMap = Map.of(
            "1/4", 0,
            "1/2", 1,
            "3/4", 2
    );
    
    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

        int friendCnt = Integer.parseInt(br.readLine());
        // 각 친구의 피자 먹는 양 받기
        int[] sizeCnt = new int[3];
        for (int i = 0; i < friendCnt; i++) {
            String pizzaSize = br.readLine();
            sizeCnt[pizzaSizeMap.get(pizzaSize)]++;
        }
        int cnt = sizeCnt[2];
        // 1/2와 1/4 계산을 위한 나머지
        int remain = Math.max(0, sizeCnt[0] - sizeCnt[2]);
        // 1/2의 사이즈로 피자 갯수 추가
        cnt += sizeCnt[1] / 2;
        // 만약 1/2사이즈가 남아있는 경우
        if (sizeCnt[1] % 2 == 1) {
            cnt++;
            // 나머지에 값이 있으면 계산
            remain = Math.max(remain - 2, 0);
        }
        // 4명당 1판이므로 나머지 았으면 추가
        int answer = cnt + (remain + 3) / 4;
        System.out.println(answer);
    }
}

처음에는 주어진 값의 3개를 소수로 변경하여 합산 후 계산하는 방식을 택하려 했으나, 1/2 한 명과 1/4 세 명인 경우 조각이 남았는데 모양이 안 맞아서 못 주는 경우가 생길 수 있었습니다.

그래서 하나하나 계산을 해줘야 했고 가장 큰 크기인 3/4의 개수로 피자 개수를 일단 잡고 나머지를 이용해 1/2와 1/4 사이즈를 먹을 때 계산을 해보라는 힌트를 받고 구현했습니다. 그러나 한 가지 추가적인 문제인 4인 1판이므로 이 부분을 간과하였고 해당 부분을 추가하여 해결했습니다.