[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))

BELATED ARTICLES

more