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

    문제 풀이

    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()에 넣고 중복을 제거해준다.
    • 1부터 10000까지 담아 있는 숫자 리스트와 중복을 제거한 수열 리스트의 차집합을 출력해주면 된다.

    solution

    def self_number() :
      not_self_number_list = set([]) # 중복을 제거함
      for num in range(1,10001):
        not_self_number_list.add(num+sum(list(map(int,str(num))))) # d(num)을 구해 set()집합형에 추가한다. 
    
      number_list = set(range(1,10001)) # 1~ 10000까지의 숫자 리스트를 만들고
    
      print(*sorted(number_list - not_self_number_list), sep='\n') # 중복을 제거한 셀프 넘버가 아닌 리스트와 1~ 10000까지의 숫자 리스트의 차집합을 출력한다.
    
    self_number()
    • d(n) 값을 구하는 방식 num+sum(list(map(int,str(num))))

    ex) d(123) = 123 + 1 + 2 + 3
    - d(123) = 123 + sum(list(map(int, '123')))
    - d(123) = 123 + sum([1, 2, 3])
    - d(123) = 123 + 1 + 2 + 3

    새롭게 배운점

    set()

    • 중복을 허용하지 않음.
    • 순서가 없음
      • 순서가 없기 때문에 index로 접근X (list나 tuple에 담아서 index로 접근)

    set()의 값 추가/ 여러 값 추가/ 제거

    a = set([1,2,3])
    
    # 특정 값 추가
    a.add(4)
    print(a) # {1, 2, 3, 4}
    
    # 여러 값 추가
    a.update([5,6,7,8])
    print(a) # {1, 2, 3, 4, 5, 6, 7, 8}
    
    # 특정 값 제거
    a.remove(1)
    print(a) # {2, 3, 4, 5, 6, 7, 8}

    set()의 교집합/합집합/차집합

    • set()의 교집합
      1. & 연산자 사용
      2. .intersection() 사용
    a = set([1,2,3,4,5])
    b = set([3,4,5,6,7,8,9])
    
    print(a & b) # {3, 4, 5}
    print(a.intersection(b)) # {3, 4, 5}
    • set()의 합집합
      1. | 연산자 사용
      2. .union() 사용
    a = set([1,2,3,4,5])
    b = set([3,4,5,6,7,8,9])
    
    print(a | b) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
    print(a.union(b)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
    • set()의 차집합
      1. * 연산자 사용
      2. .difference() 사용
    a = set([1,2,3,4,5])
    b = set([3,4,5,6,7,8,9])
    
    print(a - b) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
    print(a.difference(b)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}

    댓글