728x90

 

문제 설명 요약

  • 듣도 못한 사람의 명단이 N개, 보도 못한 사람의 명단이 M개 주어집니다.
  • 이 두 명단에 모두 속하는 이름을 사전 순으로 출력하는 것이 목표입니다.

접근 방법

  1. 데이터 저장: 듣도 못한 사람의 명단을 Set 자료구조에 저장하여 중복 처리를 간단하게 합니다. 파이썬의 Set은 해시 구조를 활용하여 원소의 탐색이 평균 O(1)에 가능하기 때문에 효율적입니다.
  2. 교집합 연산: 보도 못한 사람의 명단도 입력받고, 이를 Set로 변환하여 두 집합 간의 교집합을 구합니다. 이 방법으로 두 명단에 중복된 이름을 쉽게 찾을 수 있습니다.
  3. 결과 정렬 및 출력: 교집합으로 구한 이름들을 정렬하여 요구사항대로 출력합니다.

코드 구현

다음은 파이썬으로 구현한 코드입니다:

 

n, m = map(int, input().split())
heard = set()

# 듣도 못한 사람의 명단 입력
for _ in range(n):
    heard.add(input().strip())

# 보도 못한 사람의 명단 입력 및 교집합 계산
total = set()
for _ in range(m):
    name = input().strip()
    if name in heard:
        total.add(name)

# 결과 출력
result = sorted(total)
print(len(result))
for name in result:
    print(name)

주요 포인트

  • Set 자료구조 사용: 중복된 데이터를 효율적으로 처리하기 위해 파이썬의 Set을 사용하였습니다. 이는 듣도 못한 명단에서 보도 못한 사람을 찾을 때 매우 효과적입니다.
  • 시간 복잡도: 두 리스트의 길이를 각각 N, M이라 하면, 이 코드는 평균적으로 O(N + M)의 시간 복잡도를 가집니다. 이는 해시 테이블 기반의 Set 자료구조 덕분에 가능하며, 일반적인 리스트 탐색에 비해 훨씬 빠릅니다.

정리

이 문제는 두 집합 간의 교집합을 구하는 간단한 문제처럼 보이지만, Set을 활용한 효율적인 접근이 가능하다는 점에서 중요한 학습 포인트를 제공합니다. 특히, 해시 기반의 데이터 구조가 어떻게 효율성을 크게 향상시키는지를 직접 체험할 수 있습니다. 블로그에서는 이 문제를 통해 집합 연산의 유용성해시 구조의 효율성을 강조하는 방향으로 작성하면 좋을 것 같습니다.

이제 블로그에 이 문제를 소개할 때 어떤 추가적인 내용이나 스타일을 고려하고 싶으신가요? 예를 들어, 개인적인 경험이나 이 문제를 통해 배운 점 등을 추가하면 더 흥미로운 포스팅이 될 것 같습니다.

728x90
반응형

+ Recent posts

728x90
반응형
728x90
반응형