본문 바로가기

자료구조, 알고리즘

딕셔너리 사용, 투표문제

n명의 학생이 반장선거를 할 때 과반수 이상의 득표자가 있다면 그 사람이 반장이 되는 문제.

 

간단하게 푸는 방법으로는 딕셔너리를 사용하면 된다.

n = int(input())
votes = {}

for _ in range(n):
	name = input()
	if name in votes:
		votes[name] += 1
	else:
		votes[name] = 1


max_votes = max(votes.values())
winner = [name for name, vote in votes.items() if vote == max_votes]


if max_votes > n // 2 and len(winner) == 1:
	print(winner[0])
else:
	print('-1')

 

딕셔너리 안에 값이 없을때

votes[name] = 1

 

위와 같은 방법으로 새로운 키:벨류 를 생성 가능.

 

 

 

다른 방법으로 과반수 이상인 조건을 이용하여 

 

n = int(input())
names = [input() for _ in range(n)]

#득표수 카운트
counts = {}
for name in names:
    counts[name] = counts.get(name, 0) + 1

candidate = "-1"
#과반을 초과하는 후보 찾기
for name, count in counts.items():
    if count > len(names) // 2:
        candidate = name
        break

print(candidate)

 

같은 후보면 카운트 추가, 다른 후보면 삭제, 0일때 새로운 후보면 카운트 1로 시작. 을 반복하여 마지막에 남은 후보를 과반수 이상인지 확인하여 답을 구할 수 있다.