알고리즘 풀이

[C#] 백준 30802번 문제풀이

bimtaeur30 2025. 12. 29. 09:04

문제번호: 30802

문제명: 웰컴 키트

문제링크: https://www.acmicpc.net/problem/30802

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다.

 

해당 문제를 보자마자 사칙연산이라는 태그가 붙어있어 가벼운 마음으로 문제를 풀기 시작했습니다.

입력을 받아오고, 순조롭게 출력했습니다.

이번에는 1트에 정답이 나올 수 있지 않을까 기대했으나, 오답이었습니다.

 

반례를 찾아보니 티셔츠를 T장씩 최소 몇 묶음으로 출력하는지 구하는 부분에서 오답이 나온 것이었습니다.

곰곰이 생각해 보니 이 부분은 올림/내림 과정에서 나는 오류였습니다.

int형식의 숫자를 나누면 기본적으로 내림이 되지만, 문제가 요구하는  조건은  올림이었기 때문입니다.

 

이 부분은 해결할 아이디어가 잘 떠오르지 않아서 GPT찬스를 사용하였습니다.

기존 제 코드는 (int)Math.Ceiling(num1 / T) 이렇게 되어있지만 GPT는 정수기반올림을 사용하여 (size + T - 1) / T; 로 코드를 작성하였습니다.

이번 문제를 통해서 정수기반올림을 통해 문제해결하는 방법을 배우게 되었습니다.

감사합니다.

public static void Main()
{
    int perCount = int.Parse(Console.ReadLine());
    int[] tSizes = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
    int[] input2 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
    int T = input2[0]; // 정수 티셔츠
    int P = input2[1]; // 펜의 묶음 수

    int t_bundleC = 0;

    for (int i = 0; i < tSizes.Length; i++) // 티셔츠 묶음 수 구하기
    {
        int size = tSizes[i];
        if (size <= 0) continue;

        //t_bundleC += (int)Math.Ceiling((double)num1 / T);
        t_bundleC += (size + T - 1) / T; // 정수 기반 올림
    }

    Console.WriteLine(t_bundleC); // 1째줄/티셔츠묶음수 출력하기
    Console.WriteLine(perCount / P + " " + perCount % P);
}

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 11047번 문제풀이  (0) 2025.12.30
[C#] 백준 11723번 문제풀이  (0) 2025.12.29
[C#] 백준 2775번 문제풀이  (0) 2025.12.26
[C#] 백준 28702번 문제풀이  (0) 2025.10.19
[C#] 백준 2108번 문제풀이  (0) 2025.10.18