728x90

 

D치고는 굉장히 간단했던 문제로서, 

 

현재 가장 많은 득표수를 취하고 있는 사람들이 누구인지 묻는 문제입니다.

 

N,M = map(int,input().split())
A = list(map(int,input().split()))
vote = [0 for _ in range (0,N+1)]
vote[A[0]] += 1
print(A[0])
t = A[0]
for i in range (1,M):
    vote[A[i]] += 1
    if vote[A[i]] > vote[t]:
        print(A[i])
        t = A[i]
    elif vote[A[i]] == vote[t]:
        t = min(A[i],t)
        print(t)
    else:
        print(t)

 

소스 코드도 어렵지 않았습니다. 

 

아이디어는, 새롭게 투표되는 후보의 표가 "이전에 가장 많았던 후보의 표" 보다 많은지? 적은지를 묻는 상황입니다.

 

혹시 두명의 표가 같아지게 된다면, 더 숫자가 낮은 사람이 당선된다 하는 점에 주의 해주면 되겠습니다.

 

먼저 N명이 입후보 하였으므로 길이 N+1의 리스트를 생성해줍니다. (첫번째 element는 생각하지 않는 것으로 합니다)

 

첫번째로 투표되는 인원을 출력해주고, 인원의 투표수를 1 높여줍니다.

 

그 뒤, 반복문을 통해 "이전 최대 득표"인 후보와 현재 새롭게 투표된 사람을 비교해줍니다.

 

이전 최대 득표가 새롭게 득표된 사람의 표보다 많다면, 기존의 값을 그대로 출력해주면 될 것이고

 

혹시 같다면 더 번호가 낮은 사람을 취하기 위해 min을 사용해주고, 출력해줍니다

 

남은 경우는 새롭게 득표한 사람이 최다득표가 되는 경우였기 때문에, 이때는 최다 득표 인원을 그 인원으로 바꿔줄 필요가 있겠습니다.

 

D치고는 간단한 문제였습니다.

 

 

'코딩' 카테고리의 다른 글

[BOJ] 11055 가장 큰 증가하는 부분 수열  (1) 2023.12.17
[Atcoder] ABC 333 D - Erase Leaves  (1) 2023.12.17
[Atcoder] ABC 327 D - Take ABC  (1) 2023.11.16
[Atcoder] ABC 327 C - Consecutive  (0) 2023.11.16
[Programmers] 구명보트  (0) 2023.11.08

+ Recent posts