문제 링크
https://www.acmicpc.net/problem/25192
문제
알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다.
이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구해 보기로 했다.
ENTER는 새로운 사람이 채팅방에 입장했음을 나타낸다.
그 외는 채팅을 입력한 유저의 닉네임을 나타낸다.
닉네임은 숫자 또는 영문 대소문자로 구성되어 있다.
새로운 사람이 입장한 이후 처음 채팅을 입력하는 사람은 반드시 곰곰티콘으로 인사를 한다.
그 외의 기록은 곰곰티콘을 쓰지 않은 평범한 채팅 기록이다.
채팅 기록 중 곰곰티콘이 사용된 횟수를 구해보자!
입력
첫 번째 줄에는 채팅방의 기록 수를 나타내는 정수 N 이 주어진다.
(1 <= N <= 100000)
두 번째 줄부터 N 개의 줄에 걸쳐 새로운 사람의 입장을 나타내는 ENTER,
혹은 채팅을 입력한 유저의 닉네임이 문자열로 주어진다. (1<= 문자열길이 <= 20)
첫 번째 주어지는 문자열은 무조건 ENTER이다.
출력
채팅 기록 중 곰곰티콘이 사용된 횟수를 출력하시오.
예제
입력
7
ENTER
pjshwa
chansol
chogahui05
ENTER
pjshwa
chansol
출력
5
정답 및 풀이
import sys
input = sys.stdin.readline
n = int(input())
arr = set()
cnt = 0
for i in range(n):
name = input().strip()
if name != "ENTER":
if name not in arr:
arr.add(name)
cnt+=1
if name == "ENTER":
arr=set()
print(cnt)
- import sys
- 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
- input = sys.stdin.readline
- 많은 입력을 빠르게 처리하기 위해 기본 input() 대신 사용한다.
- n = int(input())
- 채팅 로그의 개수 n을 입력받는다.
- arr = set()
- 현재 ENTER 이후에 등장한 중복되지 않은 닉네임을 저장할 집합이다.
- cnt = 0
- 곰곰티콘을 친 사람의 총 횟수를 세기 위한 변수다.
- for i in range(n):
- 총 n개의 로그를 순차적으로 처리한다.
- name = input().strip()
- 한 줄씩 입력받아 줄바꿈 문자를 제거한다.
- if name != "ENTER":
- ENTER가 아닌 경우, 즉 사용자 이름인 경우만 처리한다.
- if name not in arr:
- 현재 세션(ENTER 이후)에서 처음 등장한 이름인지 확인한다.
- arr.add(name)
- 처음 등장한 이름이면 set에 추가한다.
- cnt += 1
- 새로운 사람이 곰곰티콘을 친 것이므로 카운트를 증가시킨다.
- if name == "ENTER":
- ENTER가 등장하면 새로운 채팅 세션이 시작됨을 의미한다.
- arr = set()
- 이전 세션의 기록을 버리고 집합을 초기화한다.
- print(cnt)
- 모든 로그를 처리한 뒤 최종 카운트를 출력한다.
새롭게 배운 내용 및 느낀점
- list
- 탐색: O(N)
- 순서 있음
- set
- 탐색: O(1)
- 중복 불가, 순서 없음
- 중복 체크 + 많은 데이터 = set 필수
'백준' 카테고리의 다른 글
| [백준] 2108 : 통계학 (Python/파이썬) (0) | 2026.01.02 |
|---|---|
| [백준] 26069 : 붙임성 좋은 총총 (Python/파이썬) (0) | 2026.01.02 |
| [백준] 1037 : 약수 (Python/파이썬) (0) | 2025.12.18 |
| [백준] 1010 : 다리 놓기 (Python/파이썬) (0) | 2025.12.18 |
| [백준] 11050 : 이항 계수 1 (Python/파이썬) (0) | 2025.12.18 |