포스트

백준 임스와 함께하는 미니게임 [25757번]

문제

백준 임스와 함께하는 미니게임

임스가 미니게임을 같이 할 사람을 찾고 있습니다.

플레이할 미니게임으로는 윷놀이 Y, 같은 그림 찾기 F, 원카드 O가 있습니다.

각각 2, 3, 4명이서 플레이해야 하는 게임이며 인원수가 부족하면 게임을 시작할 수 없습니다.

사람들이 임스와 같이 플레이하기를 신청한 횟수 N과 임스가 플레이할 게임의 종류가 주어질 때, 최대 몇 번이나 임스와 함께 게임을 플레이할 수 있는지 구하시오.

임스와 여러 번 미니게임을 플레이하고자 하는 사람이 있으나, 임스는 한 번 같이 플레이한 사람과는 다시 플레이하지 않습니다.

임스와 함께 플레이하고자 하는 사람 중 동명이인은 존재하지 않습니다.

임스와 lms0806은 서로 다른 인물입니다.

입력

첫 번째 줄에는 사람들이 임스와 같이 플레이하기를 신청한 횟수 N과 같이 플레이할 게임의 종류가 주어진다. (1 ≤ N ≤ 100000)

두 번째 줄부터 N개의 줄에는 같이 플레이하고자 하는 사람들의 이름이 문자열로 주어진다. (1 ≤ 문자열 길이 ≤ 20)

출력

임스가 최대로 몇 번이나 게임을 플레이할 수 있는지 구하시오.

예제 입출력

입력 1

1
2
3
4
5
6
7
8
7 Y
lms0806
lms0806
exponentiale
lms0806
jthis
lms0806
leo020630

출력 1

1
4

입력 2

1
2
3
4
5
6
7
8
9
10
11
12
13
12 F
lms0806
powergee
skeep194
lms0806
tony9402
lms0806
wider93
lms0806
mageek2guanaah
lms0806
jthis
lms0806

출력 2

1
3

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import sys
people, game=sys.stdin.readline().strip().split(' ')
people=int(people)

#게임 종류에따라 필요한 인원수 설정
if(game=="Y"):
  needed_people=1
elif(game=="F"):
  needed_people=2
elif(game=="O"):
  needed_people=3

#이미 게임에 참여한 사람은 집합으로 관리
already_played=set()
#현재 인원수를 관리하기 위한 변수 선언
game_waiting=0
#정답 변수 선언
result=0

for _ in range(people):
  name=sys.stdin.readline().strip()
  if name in already_played:
    continue

  already_played.add(name)
  game_waiting+=1
  if game_waiting == needed_people:
    result += 1
    game_waiting = 0

print(result)

설명

우선은 윷놀이, 같은 그림 찾기, 원카드 3개의 게임에 따른 필요인원수를 설정한다.

이미 참여한 사람은 재참여가 불가능하므로, 이미 참여한 사람들의 명단을 집합(Set)으로 관리한다.

만약 해당 명단(집합)안에 이름이 없으면, 게임을 할수 있으므로 게임 가능한 인원 수에 +1을하고, 명단에 추가한다.

이걸 모든 사람들에 대해 적용하면 된다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.