본문 바로가기

알고리즘/백준 문제 풀이

[Python] 25576번 찾았다 악질

728x90

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

 

25576번: 찾았다 악질

구수한 욕설과 귀여운 동남권 사투리가 매력인 인기 스트리머 랄파는 오늘도 열심히 게임 방송을 한다. 랄파는 과거 게임 최상위 랭커를 달성했던 빛나는 시절이 있었으나, 현재는 실력이 많이

www.acmicpc.net


 

22/09/21

 

 

전형적인 문제 잘 읽고 구현하면 되는 문제로, 그렇게 어렵지는 않다.


 

문제 접근 방식:

 

 

문제 요약하자면, 어떤 시청자가 악질인지 악질이 아닌지 판단하는 문제이다.

 

첫 번째 줄에는 어떤 시청자가 구독한 스트리머의 명수와 그 스트리머들의 시청자 수 변화 리스트의 길이가 주어진다.

 

이후 두 번째 줄에서는 랄파의 시청자 수의 변화가 주어지고, 나머지 줄에서는 각 스트리머의 시청자 수의 변화가 주어진다.

 

악질인지 악질이 아닌지를 판단하는 것의 기준은 랄파랑 친하지 않은 스트리머를 절반 이상 구독했는가의 여부이다.

 

어떤 스트리머가 랄파랑 친하냐 친하지 않느냐의 여부는 랄파의 시청자 수의 변화와 그 스트리머의 시청자 수 변화를 서로 일대일 매칭을 시켰을 때의 그 차이들의 합이 2000 이하면 친한 것, 그게 아니라면 친하지 않은 것이다.

 

예를 들어 랄파의 시청자 수 변화가 [1000, 2000, 3000]이고, 어떤 스트리머의 시청자 수 변화가 [1200, 2200, 2800]이면, 100+200+200 = 500 < 2000이므로 두 스트리머는 친한 것이다.

 

이 내용을 그대로 구현하였다. 특이한 점은 일대일 매칭을 시킬 때 zip함수를 사용한 점이다.

 

또한, 절반 이상을 구독했는가를 따질 때, 랄파를 제외한 스트리머가 홀수냐 짝수냐를 따져서 부등호를 조금 바꾸어서 구현했다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 25576번 찾았다 악질
# 수학, 구현
import sys
input = sys.stdin.readline

N, M = map(int, input().rstrip().split())
ralpa = list(map(int, input().rstrip().split()))
bad_streamer = 0
for _ in range(N-1):
    view_change = list(map(int, input().rstrip().split()))
    k = sum([abs(i - j) for i, j in zip(ralpa, view_change)])
    if k > 2000:
        bad_streamer += 1
if (N-1)%2 == 0:
    if bad_streamer >= (N-1)//2:
        print('YES')
    else:
        print('NO')
else:
    if bad_streamer > (N-1)//2:
        print('YES')
    else:
        print('NO')