[PYTHON] 3052 나머지 - 중복을 제거하는 법 set

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

     

    3052번: 나머지

    각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

    www.acmicpc.net

     

    문제 풀이

    • 10개의 수를 리스트에 담는다.
    • 리스트에서 요소 하나씩 순회하면서 42로 나눈 나머지 값을 저장한다.
    • 중복을 제거하고 그 개수를 출력한다.
      • 중복을 제거할땐 set을 활용한다.

    solution

    import sys
    
    Nber_list = [int(sys.stdin.readline().strip()) for _ in range(10)]
    
    # map을 활용하여 Nber_list의 요소 하나씩 42로 나눈 나머지 값을 저장함
    remainder_list = list(map(lambda x: x%42, Nber_list)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # set을 이용하여 중복을 제거된 값을 반환받음
    unique_remainder_list = set(remainder_list) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    
    print(len(unique_remainder_list)) # 10

    set()

    • 유일한 값들의 모음
    • 중괄호 혹은 set()을 통해 생성
      • 빈 Set을 만들기 위해 반드시 Set()으로 생성
    • 순서가 없고 중복된 값이 없음
      • 별도의 값에 접근할 수 없음
    • 변경 가능, 반복 가능
    • 값 추가는 .add() / 값 삭제는 .remove()

    set 활용 case

    • 다른 컨테이너에서 중복된 값을 쉽게 제거 가능.
      • 주의! 순서가 무시되므로 순서가 중요하면 사용할 수 없음.
    • 리스트에서 고유한 지역의 개수 구하는 법
    # set 사용하지 않는 방법
    my_list = ['서울','서울','대전','광주','서울','대전','부산','부산']
    
    result = []
    for value in my_list :
      if value not in result :
        result.append(value)
    
    print(len(result)) # 4
    
    # set 사용
    print(set(my_list)) # {'부산', '광주', '서울', '대전'} / 순서 무작위
    print(len(set(my_list))) # 4

    set의 개념을 활용하여 데이터의 차집합, 교집합, 합집합을 이용하고 싶으면 아래의 글을 참고해주세요

     

    2023.01.15 - [algorithm/백준] - [PYTHON]4673 셀프넘버 set()/중복제거/차집합/합집합/교집합

     

    [PYTHON]4673 셀프넘버 set()/중복제거/차집합/합집합/교집합

    https://www.acmicpc.net/problem/4673 문제 풀이 d(1) = 1 + 1 = 2 d(2) = 2 + 2 = 4 d(3) = 3 + 3 = 6 ⋮ d(123) = 123 + 1 + 2 + 3 ⋮ d(10000) = 10000 + 1 = 10001 1부터 10000까지의 n을 넣은 d(n)의 값을 set()에 넣고 중복을 제거해준다.

    menduck.tistory.com

    댓글