본문 바로가기
Algorithm

[자료구조/해시] 백준 1764 듣보잡 - Python

by jangThang 2022. 2. 15.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1764번: 듣보잡

    첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     두 집합의 교집합을 사전순으로 정렬하는 문제입니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     듣도 못한 사람과, 보도 못한 사람의 교집합을 구하는 문제입니다. (듣보잡)

     두 명단을 리스트로 받아서 비교할 수도 있지만, 시간초과를 면하지 못합니다..

     그 보다는 파이썬의 '집합' 자료구조를 사용해야 합니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    N, M = map(int, input().split())
    noHear = [] #듣도 못한 사람
    noHearSee = [] #듣보잡
    for _ in range(N):
        noHear.append(input().rstrip())
    for _ in range(M):
        noSee = input().rstrip() #보도 못한 사람
        if noSee in noHear:
            noHearSee.append(noSee)
    
    noHearSee.sort() #사전순 정렬
    print(len(noHearSee))
    for name in noHearSee:
        print(name)

     본래는 in연산자로 비교해서 듣도보도 못한 사람들의 명단을 구했습니다. 하지만, 위 방식은 시간초과가 납니다.

     

     

    import sys
    input = sys.stdin.readline
    
    N, M = map(int, input().split())
    noHear = set() #듣도 못한 사람
    noSee = set() #듣보잡
    for _ in range(N):
        noHear.add(input().rstrip())
    for _ in range(M):
        noSee.add(input().rstrip()) #보도 못한 사람
    
    noHearSee = sorted(list(noHear & noSee)) #교집합 중 사전순 정렬
    
    print(len(noHearSee))
    for name in noHearSee:
        print(name)

     파이썬의 집합 자료구조를 이용하면, 쉽게 구할 수 있습니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글