[BAEKJOON] 백준 23971: ZOAC 4 (C#)

2024. 10. 16. 15:22IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/23971

 

 

문제

2021년 12월, 네 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 오프라인 대회를 대비하여 강의실을 예약하려고 한다.

강의실에서 대회를 치르려면 거리두기 수칙을 지켜야 한다!

한 명씩 앉을 수 있는 테이블이 행마다 W개씩 H행에 걸쳐 있을 때, 모든 참가자는 세로로 N칸 또는 가로로 M칸 이상 비우고 앉아야 한다. 즉, 다른 모든 참가자와 세로줄 번호의 차가 N보다 크거나 가로줄 번호의 차가 M보다 큰 곳에만 앉을 수 있다.

논문과 과제에 시달리는 성우를 위해 강의실이 거리두기 수칙을 지키면서 최대 몇 명을 수용할 수 있는지 구해보자.

 

 

입력

H, W, N, M이 공백으로 구분되어 주어진다. (0 < H, W, N, M ≤ 50,000)

 

 

출력

강의실이 수용할 수 있는 최대 인원 수를 출력한다.

 

 

 

통과한 답안

namespace _23971
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] inputs = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int H = inputs[0];
            int W = inputs[1];
            int N = inputs[2];
            int M = inputs[3];

            int a = (H / (N + 1)) + (H % (N + 1) > 0 ? 1 : 0);
            int b = (W / (M + 1)) + (W % (M + 1) > 0 ? 1 : 0);

            Console.WriteLine(a * b);
        }
    }
}

 

테이블의 행의 개수와 열의 개수, 참가자들의 거리 세로 N칸, 가로 M칸이 주어졌을 때,

최대로 수용할 수 있는 참가자들의 수를 구하는 문제이다.

추가로 주의해야되는 조건이 다른 모든 참가자와 세로줄의 번호가 N보다 크거나

가로줄의 번호가 M보다 큰 곳에만 앉을 수 있다는 조건으로

이는 참가자들의 거리가 아닌, 행렬의 좌표를 기준으로 판단해야 된다는 뜻이다.

 

따라서 한 참가자당 (N + 1) * (M + 1)의 공간을 차지해야되므로

H * W로 이루어진 공간을 (N + 1) * (M + 1)로 나누면 해결할 수 있다.

단, 마지막에 앉는 참가자는 공간을 (N + 1) * 1 또는 1 * (M + 1)의 공간만 차지해도 되므로

위의 그림에서 (5, 1)과 (5, 3)에 앉는 참가자는 각각 2 * 2의 공간이 아닌 1 * 2의 공간을 차지해도 조건에 부합한다.

int a = (H / (N + 1)) + (H % (N + 1) > 0 ? 1 : 0);

위의 코드와 같이 세로의 길이(H)를 세로의 간격 + 1(N + 1)로 나눈 몫과 나머지를 이용하여

몫은 그대로 사용하고, 나머지가 존재한다면 몫에 1을 더하는 방식으로 구현할 수 있다.

 

이렇게 a와 b를 통해서 세로에 앉을 수 있는 참가자 수와 세로에 앉을 수 있는 참가자 수를 구하여

이를 곱하면 주어진 H * W 강의실에서 수용할 수 있는 참가자의 최대 수를 구할 수 있다.

'IT > BaekJoon' 카테고리의 다른 글

[BAEKJOON] 백준 18238: ZOAC 2 (C#)  (0) 2024.10.16
[BAEKJOON] 백준 20436: ZOAC 3 (C#)  (0) 2024.10.16
[BAEKJOON] 백준 26594: ZOAC 5 (C#)  (0) 2024.10.16
[BAEKJOON] 백준 30045: ZOAC 6 (C#)  (1) 2024.10.16
[BAEKJOON] 백준 2852: NBA 농구 (C#)  (11) 2024.10.15