

문제를 살펴보면 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())을 사용하는 방법도 존재하기 때문에 본인에게 편한 방법을 선택하면 된다

'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 2108 통계학(실버 3) - Python (0) | 2024.12.10 |
|---|---|
| [Baekjoon]백준 26069 붙임성 좋은 총총이(실버 4) - Python (1) | 2024.12.09 |
| [Baekjoon]백준 1037 약수(브론즈 1) - Python (0) | 2024.12.07 |
| [Baekjoon]백준 1010 다리놓기(실버 5) - Python (0) | 2024.12.06 |
| [Baekjoon]백준 11050 이항 계수 1(브론즈 1) - Python (0) | 2024.12.05 |