[PYTHON/파이썬] 1764 듣보잡 - Counter/Filter/setdefault

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

     

    1764번: 듣보잡

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

    www.acmicpc.net

     

    문제 풀이

    • 듣도 못한 사람과 보도 못한 사람의 리스트를 저장한다.
    • Counter 모듈을 이용해 중복된 개수를 딕셔너리로 받는다.
    • 중복된 개수가 1 이상인 key값만 리스트에 저장하고
    • 그 리스트의 길이을 출력한다.
    • 리스트를 정렬하여 한 줄씩 출력한다.

    solution - 성공/ Counter와 filter를 활용한 풀이

    from collections import Counter
    import sys
    n,m = list(map(int, sys.stdin.readline().strip().split()))
    
    # Counter를 활용하여 이름과 중복된 개수를 딕셔너리로 반환받음.
    data = Counter([sys.stdin.readline().strip() for _ in range(n+m)])
    
    # Counter({'ohhenrie': 2, 'baesangwook': 2, 'charlie': 1, 'obama': 1, 'clinton': 1}) 
    
    # filter를 활용하여 중복된 개수가 1이상인 명단만 추출
    duplicate_data = list(filter(lambda str: data[str] > 1, data))
    # ['ohhenrie', 'baesangwook']
    
    # 사전순으로 정렬
    duplicate_data.sort()
    
    print(len(duplicate_data), *duplicate_data, sep ='\n')

    solution2 - 딕셔너리와 리스트를 활용한 풀이

    import sys
    n,m = list(map(int, sys.stdin.readline().strip().split()))
    dict = {}
    duplicate_list = []
    for _ in range(n+m):
        word = sys.stdin.readline().strip()
        if word in dict: # 이름이 dict에 있으면 중복된 리스트에 추가
            duplicate_list.append(word)
        else: # 이름이 dict에 없으면 dict에 value의 기본값을 0으로 추가
            dict.setdefault(word,0) # value값을 0
    
    # print(dict) 
    # {'ohhenrie': 0, 'charlie': 0, 'baesangwook': 0, 'obama': 0, 'clinton': 0}
    
    # print(duplicate_list)
    # ['baesangwook', 'ohhenrie']
    duplicate_list.sort()
    print(len(duplicate_list),*duplicate_list,sep='\n')   

    새롭게 배운 점.

    dict.setdefault(key값, 기본값)

    • 만약 딕셔너리에 키-값 쌍을 추가할때 활용한다.
    • 만약 value값이 없다면 setdefault 함수를 활용해 기본값을 설정할 수 있다.
    
    dict = {'수학':100,'음악':50,'과학':90}
    # 새로운 키와 값을 추가하고 싶으면? setdefault 활용하기
    
    dict.setdefault('국어') # 두 번째 인자를 넣지 않으면 기본값 None
    print(dict) {'수학': 100, '음악': 50, '과학': 90, '국어': None}
    dict.setdefault('영어', 60) # 두 번째 인자에 기본값 설정
    print(dict) # {'수학': 100, '음악': 50, '과학': 90, '국어': None, '영어': 60}

    댓글