Programming/백준

[브론즈 2] 백준 10040 - 투표 (파이썬)

pental 2025. 5. 4. 12:33

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

풀이

  • N명의 선수에게 각각 가장 낮은 응모 번호 이상인 응모자 한 명씩을 배정한다.
  • 응모자는 B 리스트에, 선수의 응모 기준 번호는 A 리스트에 주어진다.
  • 가장 많은 응모자를 배정받은 선수의 번호(1-based)를 출력해야 한다.
count = [0] * N  # 각 선수에게 배정된 응모자 수

for i in range(M):  # 모든 응모자에 대해
    for j in range(N):  # 선수 순서대로 확인
        if A[j] <= B[i]:  # 응모 조건을 만족하면
            count[j] += 1  # 해당 선수에 배정
            break  # 이 응모자는 더 이상 배정되지 않음

A[j] ≤ B[i]인 가장 첫번쨰 선수 J를 찾아서 B[i]를 배정한다.

응모자는 한 번만 배정되며, 여러 선수가 가능하다면 가장 앞에 있는 선수에게 배정된다.

max_vote = 0
who = -1
for i in range(N):
    if max_vote < count[i]:  # 최댓값 갱신
        max_vote = count[i]
        who = i

print(who + 1)  # 1-based index로 출력

응모자의 투표를 받고 가장 많이 배정된 선수를 출력한다.

코드

# 백준 10040 - 투표
# 분류 : 구현

N, M = map(int, input().split())
A = [int(input()) for _ in range(N)]
B = [int(input()) for _ in range(M)]

count = [0] * N

for i in range(M) :
    for j in range(N) :
        if A[j] <= B[i] :
            count[j] += 1
            break

max_vote = 0
who = -1
for i in range(N) :
    if max_vote < count[i] :
        max_vote = count[i]
        who = i

print(who + 1)