백준

[백준] 26069 : 붙임성 좋은 총총 (Python/파이썬)

sson-coding 2026. 1. 2. 15:07

문제 링크

https://www.acmicpc.net/problem/26069

문제

총총이는 친구 곰곰이의 소개로 제2회 곰곰컵에 출연할 기회를 얻었다!

총총이는 자신의 묘기인 무지개 댄스를 선보여, 여러분의 환심을 사려 한다. 
이 댄스는 중독성이 강하기 때문에, 한번 보게 된 사람은 모두 따라 하게 돼버린다

사람들이 만난 기록이 시간 순서대로 N개 주어진다. 
(총총이는 토끼이지만 이 문제에서는 편의상 사람이라고 가정한다.)

무지개 댄스를 추지 않고 있던 사람이 무지개 댄스를 추고 있던 사람을 만나게 된다면, 
만난 시점 이후로 무지개 댄스를 추게 된다.

기록이 시작되기 이전 무지개 댄스를 추고 있는 사람은 총총이 뿐이라고 할 때, 
마지막 기록 이후 무지개 댄스를 추는 사람이 몇 명인지 구해보자!

입력

첫번째 줄에는 사람들이 만난 기록의 수 N(1 <= N <= 1000)이 주어진다.

두번째 줄부터 N개의 줄에 걸쳐 사람들이 만난 기록이 주어진다. 
i + 1번째 줄에는 i번째로 만난 사람들의 이름 
A_i와 B_i가 공백을 사이에 두고 주어진다. 
A_i와 B_i는 숫자와 영문 대소문자로 이루어진 최대 길이 
20의 문자열이며, 서로 같지 않다.

총총이의 이름은 ChongChong으로 주어지며, 기록에서 1회 이상 주어진다.

동명이인은 없으며, 사람의 이름은 대소문자를 구분한다. (ChongChong과 chongchong은 다른 이름이다.)

출력

마지막 기록 이후 무지개 댄스를 추는 사람의 수를 출력하라.

예제

입력

12
bnb2011 chansol
chansol chogahui05
chogahui05 jthis
jthis ChongChong
jthis jyheo98
jyheo98 lms0806
lms0806 pichulia
pichulia pjshwa
pjshwa r4pidstart
r4pidstart swoon
swoon tony9402
tony9402 bnb2011

출력

10

정답 및 풀이

나의 풀이

  1. import sys
    • 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
  2. input = sys.stdin.readline
    • 기본 input()보다 속도가 빠른 sys.stdin.readline을 사용해 많은 입력을 효율적으로 처리한다.
  3. n = int(input())
    • 만남의 횟수 n을 입력받는다.
  4. meet = set()
    • 춤을 추게 된 사람들을 중복 없이 저장하기 위해 빈 집합을 생성한다.
  5. for i in range(n):
    • 총 n번의 만남 정보를 순서대로 처리한다.
  6. before, after = input().strip().split()
    • 한 번의 만남에서 두 사람의 이름을 입력받아 before, after에 저장한다.
  7. if before == "ChongChong": meet.add(after)
    • ChongChong을 직접 만난 사람(after)은 바로 춤을 추게 되므로 집합에 추가한다.
  8. if after == "ChongChong": meet.add(before)
    • 반대로 after가 ChongChong인 경우 before를 집합에 추가한다.
  9. if before in meet:
    • 이미 춤을 추는 사람(before)과 만났는지 확인한다.
  10. meet.add(after)
    • 춤을 추는 사람과 만났다면 상대방(after)도 춤을 추게 되어 집합에 추가한다.
  11. elif after in meet:
    • after가 이미 춤을 추는 사람인지 확인한다.
  12. meet.add(before)
    • after가 춤을 추는 사람이라면 before를 집합에 추가한다.
  13. print(len(meet))
    • 최종적으로 춤을 추게 된 사람의 수를 출력한다.

다른 풀이

import sys
input = sys.stdin.readline

n = int(input())
dance = {"ChongChong"}

for _ in range(n):
    a, b = input().split()
    if a in dance or b in dance:
        dance.add(a)
        dance.add(b)

print(len(dance))
  1. import sys
    • 빠른 입력을 사용하기 위해 sys 모듈을 불러온다.
  2. input = sys.stdin.readline
    • 기본 input()보다 속도가 빠른 sys.stdin.readline을 사용해 많은 입력을 효율적으로 처리한다.
  3. n = int(input())
    • 만남의 횟수 n을 입력받는다.
  4. dance = {"ChongChong"}
    • 처음부터 춤을 추고 있는 사람은 ChongChong이므로 집합에 미리 넣어둔다.
  5. for _ in range(n):
    • 총 n번의 만남 정보를 순서대로 처리한다.
  6. a, b = input().split()
    • 한 번의 만남에서 두 사람의 이름을 입력받아 a, b에 저장한다.
  7. if a in dance or b in dance:
    • 두 사람 중 한 명이라도 이미 춤을 추고 있는지 확인한다.
  8. dance.add(a)
    • 조건을 만족하면 a도 춤을 추게 되므로 집합에 추가한다.
  9. dance.add(b)
    • 조건을 만족하면 b도 춤을 추게 되므로 집합에 추가한다.
  10. print(len(dance))
    • 최종적으로 춤을 추고 있는 사람의 수를 출력한다.