[Python] 백준 25757번 : 임스와 함께하는 미니게임
2025. 4. 15. 16:24
99클럽 코테 스터디 | 비기너 | 12일차
접근 방법 1
1. set을 이용하여 플레이하기를 신청한 사람들의 이름을 people()에 정렬한다.
2. 게임 Y, F, O는 임스를 제외하고 각각 1명, 2명, 3명이 더 필요하므로, 각각의 입력에 따라 people의 전체 길이를 1, 2, 3으로 나눈 값을 play_time 변수로 리턴한다.
def solution(people, game):
play_time = 0
if game == "Y":
play_time = len(people)
elif game == "F":
play_time = len(people) // 2
elif game == "O":
play_time = len(people) // 3
return print(play_time)
N, game = input().split()
people = set()
for _ in range(int(N)):
name = input()
people.add(name)
solution(people, game)
하지만 채점현황에서 확인했을 때 메모리(43680KB)와 시간(2448ms) 측면에서 굉장히 비효율적인 코드라는 것을 알 수 있었다. 따라서 지피티를 참고하여 조금 더 효율적인 코드로 다시 짜보았다.
접근 방법 2
1. 기존의 코드는 입력을 input()으로 받고 있는데, 이는 한 줄씩 처리되기 때문에 입력의 개수가 많아질수록 느려지는 특징이 있다. 따라서 대량 입력이 들어올 때는 sys.stdin.readline을 사용하는 것이 훨씬 빠르다.
import sys
N, game = sys.stdin.readline().split()
people = set()
for _ in range(int(N)):
name = sys.stdin.readline().strip()
people.add(name)
2. print()와 return을 함께 사용하였는데, 이중 연산처럼 보이고 불필요한 동작이 있다. 따라서 return play_time으로 처리하고 출력은 나중에 하는 것이 좋다.
전체적으로 최적화된 코드는 아래와 같다. (메모리 43680KB, 시간 84ms)
import sys
def solution(people, game):
if game == "Y":
return len(people)
elif game == "F":
return len(people) // 2
elif game == "O":
return len(people) // 3
N, game = sys.stdin.readline().split()
people = set()
for _ in range(int(N)):
name = sys.stdin.readline().strip()
people.add(name)
print(solution(people, game))
'코딩테스트 > BOJ' 카테고리의 다른 글
[Python] 백준 20723번 : 브실이의 입시전략 (0) | 2025.04.18 |
---|---|
[Python] 백준 1181번 : 단어 정렬 (0) | 2025.04.17 |
[Python] 백준 2358번 : 평행선 (0) | 2025.04.11 |
[Python] 백준 1158번 : 요세푸스 문제 (0) | 2025.04.09 |
[Python] 백준 3986번 : 좋은 단어 (0) | 2025.04.08 |