백준

[백준] 25192 : 인사성 밝은 곰곰이 (Python/파이썬)

sson-coding 2025. 12. 18. 17:54

문제 링크

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)
  1. import sys
    • 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
  2. input = sys.stdin.readline
    • 많은 입력을 빠르게 처리하기 위해 기본 input() 대신 사용한다.
  3. n = int(input())
    • 채팅 로그의 개수 n을 입력받는다.
  4. arr = set()
    • 현재 ENTER 이후에 등장한 중복되지 않은 닉네임을 저장할 집합이다.
  5. cnt = 0
    • 곰곰티콘을 친 사람의 총 횟수를 세기 위한 변수다.
  6. for i in range(n):
    • 총 n개의 로그를 순차적으로 처리한다.
  7. name = input().strip()
    • 한 줄씩 입력받아 줄바꿈 문자를 제거한다.
  8. if name != "ENTER":
    • ENTER가 아닌 경우, 즉 사용자 이름인 경우만 처리한다.
  9. if name not in arr:
    • 현재 세션(ENTER 이후)에서 처음 등장한 이름인지 확인한다.
  10. arr.add(name)
    • 처음 등장한 이름이면 set에 추가한다.
  11. cnt += 1
    • 새로운 사람이 곰곰티콘을 친 것이므로 카운트를 증가시킨다.
  12. if name == "ENTER":
    • ENTER가 등장하면 새로운 채팅 세션이 시작됨을 의미한다.
  13. arr = set()
    • 이전 세션의 기록을 버리고 집합을 초기화한다.
  14. print(cnt)
    • 모든 로그를 처리한 뒤 최종 카운트를 출력한다.

새롭게 배운 내용 및 느낀점

  • list
    • 탐색: O(N)
    • 순서 있음
  • set
    • 탐색: O(1)
    • 중복 불가, 순서 없음
  • 중복 체크 + 많은 데이터 = set 필수