대기업 코테 유형

(백준/파이썬) [Silver V] 임스와 함께하는 미니게임 - 25757

난쟁이 개발자 2024. 9. 5. 16:29
반응형

[Silver V] 임스와 함께하는 미니게임 - 25757

문제 링크

성능 요약

메모리: 119000 KB, 시간: 152 ms

분류

자료 구조, 해시를 사용한 집합과 맵, 문자열

제출 일자

2024년 9월 5일 16:07:17

문제 설명

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

플레이할 미니게임으로는 윷놀이 Y, 같은 그림 찾기 F, 원카드 O가 있습니다. 각각 2, 3, 4 명이서 플레이하는 게임이며 인원수가 부족하면 게임을 시작할 수 없습니다.

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

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

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

입력

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

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

사람들의 이름은 숫자 또는 영문 대소문자로 구성되어 있다.

출력

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

 

풀이

같이 플레이할 게임에 따라 인원수가 달라진다 = key-value 가 존재한다... = 딕셔너리를 써보자.

N <= 10 ** 5 이기 때문에 O(N^2) 까지 가능하다. 무리만 하지 않으면 어지간하면 구현이 가능하다.

dict와 set은 어지간하면 O(1)로 동작하기 때문에 이 자료구조들을 활용하면 시간 초과없이 해결이 가능할 것이라고 생각된다.

Y=2, F=3, O=4 인데 임스와 같이 플레이 하기 때문에 -1을 해줘야 한다는 것을 까먹지 말자.

실제로는 Y=1, F=2, O=3 으로 했지만, 헷갈리기 때문에 변수를 하나 더 불러내어 다시 정의해주었다.

더보기
N, P = input().split()
N = int(N)

# game : 임스와 같이 게임 하기 때문에 -1 씩 시켜주어야 한다.
game = {"Y" : 2, "F" : 3, "O" : 4}
limit = game[P] - 1

# 한 번 같이 플레이한 사람과는 다시 플레이 하지 않는다. => 중복 제거
players = set()

for _ in range(N) :
    players.add(input())

ans = len(players) // limit
print(ans)
반응형