본문 바로가기

Baekjoon

[Baekjoon]백준 25192 인사성 밝은 곰곰이(실버 4) - Python

문제설명
예제

문제를 살펴보면 ENTER가 입력된 이후에 채팅한 인원들의 수를 카운트하되, 중복되면 안되는 문제이다

처음에 바로 든 생각은 리스트를 하나 만들어 in 연산자를 통해 중복 여부를 확인하여

중복이 아니라면 append()를 통해 인원의 이름을 추가하는 방식이 편할 것 같았다

대신 ENTER가 입력되면 리스트를 초기화해주어야하며 최종 출력 직전에 리스트에 입력된 이름을 더해주어야한다

그래서 정답을 출력하기 전에 if 문을 통해 인원수를 추가하는 로직을 추가하였다

밑의 코드를 작성하여 제출하였더니

import sys

N = int(input())
cnt = 0
user = []

for _ in range(N):
    chat = sys.stdin.readline().strip()
    
    if chat == 'ENTER':
        cnt += len(user)
        user = []
    else:
        if chat not in user:
            user.append(chat)
            #print(user)
        
if user:
    cnt += len(user)
    
print(cnt)

시간초과가 발생한다

( sys.stdin.readline() 을 사용하기 위해선 ENTER\n 과 같은지 확인하거나 rstrip(), strip()을 통해 개행문자 제거 해야함 )

아무래도 리스트를 사용하여 시간 효율 측면에서 불리한 것 같았다

그래서 딕셔너리를 활용하여 코드를 다시 작성하였고, 정답임을 확인할 수 있었다

import sys

N = int(input())
cnt = 0
user = {}

for _ in range(N):
    chat = sys.stdin.readline().strip()
    
    if chat == 'ENTER':
        cnt += len(user)
        user = {}
    else:
        if chat not in user:
            user[chat] = True
            
if user:
    cnt += len(user)

print(cnt)

물론 딕셔너리 대신 집합 (set())을 사용하는 방법도 존재하기 때문에 본인에게 편한 방법을 선택하면 된다