[BAEKJOON] 백준 25576: 찾았다 악질 (C#)

2024. 10. 17. 09:42IT/BaekJoon

문제 링크

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

 

 

문제

구수한 욕설과 귀여운 동남권 사투리가 매력인 인기 스트리머 랄파는 오늘도 열심히 게임 방송을 한다. 랄파는 과거 게임 최상위 랭커를 달성했던 빛나는 시절이 있었으나, 현재는 실력이 많이 줄어들어 매일매일 악질 시청자의 훈수와 싸우고 있다. 랄파 방송을 오랫동안 봐온 당신은, 어느 날 한 가지 엄청난 사실을 발견했다. 바로 악질 시청자들이 랄파와 사이가 좋지 않은 스트리머들을 다수 구독하고 다닌다는 사실이었다. 클린한 랄파의 방송을 위해 당신은 직접 정의를 행하고자 이들을 모두 찾아내기로 한다.

랄파가 방송하는 플랫폼인 샌드위치TV는 서로 친한 스트리머들의 시청자 변화 추이가 비슷하다는 특징이 있다. 그리고, 특정한 기간 내 각 시청자 차이의 합이 2000이 넘어갈 경우 서로 사이가 좋지 않다는 것을 알고 있다.

예를 들어 스트리머 A, B, C의 시간별 시청자 변화 추이가 아래와 같다고 한다.

  • A : 1000, 2000, 3000
  • B : 1100, 2200, 2800
  • C : 3000, 1000, 4000

A와 B의 기간 내 시청자 차이의 합은 100 + 200 + 200 = 500이고, A와 C의 기간 내 시청자 차이의 합은 

2000 + 1000 + 1000 = 4000이다. 따라서 A와 B는 시청자 차이의 합이 2000 이하이므로 서로 사이가 좋고, A와 C는 시청자 차이의 합이 2000보다 크므로 서로 사이가 나쁘다.

특정 시청자가 구독한 스트리머들 중 랄파를 제외했을 때 구독한 스트리머들의 절반 이상이 랄파와 사이가 좋지 않은 스트리머라면, 그 시청자는 악질 시청자이다.

어느 시청자가 구독한 랄파를 포함한 스트리머들의 시청자 변화 추이가 주어질 때, 해당 시청자가 악질 시청자인지 판단하는 프로그램을 작성하시오.

 

 

입력

첫 번째 줄에 시청자가 구독한 스트리머의 수 N, 시청자 변화 추이의 길이 M이 주어진다. (2≤N≤10000,1≤M≤100)

두 번째 줄에는 랄파의 시청자 변화 추이 Lj가 M개 주어진다. (1≤Lj≤10000) 

세 번째 줄부터 N+1번째 줄까지 각 스트리머 i의 시청자 변화 추이 Ki,j가 M개 주어진다.(1≤Ki,j≤10000)

 

 

출력

첫 번째 줄에 해당 시청자가 악질이면 YES, 아니면 NO를 출력한다.

 

 

 

통과한 답안

namespace _25576
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] inputs = Console.ReadLine().Split(' ');
            int N = int.Parse(inputs[0]);
            int M = int.Parse(inputs[1]);
            int[] baseNum = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int cnt = 0;

            for (int i = 0; i < N - 1; i++)
            {
                int[] nowNum = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
                int total = 0;

                for (int j = 0; j < nowNum.Length; j++)
                {
                    total += Math.Abs(nowNum[j] - baseNum[j]);
                }

                if (total > 2000) cnt++;
            }

            Console.WriteLine((double)(N - 1) / 2 > cnt ? "NO" : "YES");
        }
    }
}

 

N개의 구독한 스트리머의 수, M개의 시청자 변화의 길이가 주어졌을 때,

첫 번째 스트리머와 비교하여 시청자 변화의 총 합이 2000이 넘어가는 스트리머의 수를 구하고,

그 스트리머의 수가 (N - 1)의 절반을 넘어가는 경우 YES를 그렇지 않다면 NO를 출력하는 문제이다.

 

문제의 설명이 조금 모호한 면이 있는데 중요한 포인트는 아래와 같다.

첫 번째 줄에 입력된 N개의 데이터 줄과 각 줄에 M개의 데이터들이 주어진다.

두 번째 줄에 입력된 M개의 숫자들이 기준이 되는 숫자들이다.

그 이후에 입력되는 (N - 1)개의 줄에 있는 각 M개의 데이터들과

기준이 되는 숫자들과의 차이의 합이 2000이 넘는지 찾는 문제이다.

 

이를 구현하기 위해서 위와 같이 코드를 작성했는데,

기준 숫자들을 baseNum 배열로 입력받은 후에,

2000이 넘어가는 스트리머의 수를 cnt로 저장하였다.

 

이후에 for문에서 (N - 1)개의 입력값들에 대해서 각각의 시청자 변화의 차이를 구하고

이들의 합을 total로 저장하여 이 값이 2000이 넘는지 확인하도록 구현하였다.

 

마지막으로 구한 2000이 넘어가는 스트리머의 수를 이용하여

(N - 1)의 절반이 넘어가는지 확인하여 YES 혹은 NO를 출력하도록 구현하였다.

여기서 N을 int로 받아왔으므로 double로 형변환하였다.