백준 25192

jeonghens·2024년 3월 2일

알고리즘: BOJ

목록 보기
44/125

ENTER라는 입력을 기준으로,
각 구간에 포함된 사람의 수를 구하는 문제이다.

이때 각 구간에 중복으로 나오는 사람이 있다면 1명으로 생각한다.


n만큼 닉네임을 입력 받으면서..
1) 입력이 ENTER라면,
1-1) 현재 구간(messages)에 포함된 중복 없는 사람의 수를 더한다.
1-2) 구간을 빈 리스트로 초기화한다.

2) 입력이 ENTER가 아니라면,
구간에 해당되는 messages 리스트에 추가한다.

마지막에 ENTER가 나오지 않는 경우,
마지막 구간의 사람 수는 더해지지 않기 때문에,
for문이 종료된 이후 1-1의 과정을 한 번 더 반복한다.


코드(정답)는 다음과 같다.

# 25192

import sys

n = int(sys.stdin.readline())

messages = []
cnt = 0
for _ in range(n):
    chat = sys.stdin.readline().rstrip()

    if chat == 'ENTER':
        cnt += len(set(messages))
        messages = []
    else:
        messages.append(chat)

cnt += len(set(messages))

print(cnt)

리스트를 사용하지 않고 바로 집합 자료형으로 풀어도 된다.

코드는 비슷한데,
실행 시간은 조금 더 빠르다.


코드(정답)는 다음과 같다.

import sys

n = int(sys.stdin.readline())

messages = set()
cnt = 0
for _ in range(n):
    chat = sys.stdin.readline().rstrip()

    if chat == 'ENTER':
        cnt += len(messages)
        messages = set()
    else:
        messages.add(chat)

cnt += len(messages)

print(cnt)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글