백준

백준 4673번 셀프 넘버

hyunzxn 2022. 8. 8. 11:58

[문제]

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

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

 

[풀이]

numbers = set(range(1, 10000))
have_generated_num_set = set()

for num in numbers:
    for n in str(num):
        num += int(n)
    have_generated_num_set.add(num)

self_numbers = numbers - have_generated_num_set

for self_number in sorted(self_numbers):
    print(self_number)

 

 

[새로 배우게 된 것]

 

◉ 파이썬 자료형 set

 

파이썬 자료형 set은 집합에 관한 것을 다루기 위해 만들어진 자료형이다. 

 

 

> 사용법

 

list1 = [1,2,3]
s1 = set(list1)

# 결과: {1, 2, 3}

 

word = "hello"
s2 = set(word)

# 결과: {'e', 'h', 'l', 'o'}

 

set 자료형의 가장 큰 특징은 ① 중복을 허용하지 않고 ② 순서가 없다는 것이다. 

 

비어있는 set 자료형은 s = set()  이렇게 만들 수 있다. 

 

 

> 집합이기 때문에 교집합, 합집합, 차집합 등도 구할 수 있다.

 

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

 

■ 교집합

 

s1 & s2

s1.intersection(s2)

# 결과: {4,5,6}

& 기호를 사용하거나 intersection 메소드를 이용해서 구하면 된다.

 

 

■ 합집합

 

s1 | s2

s1.union(s2)

# 결과: {1,2,3,4,5,6,7,8,9}

 | 기호나 union 메소드를 이용하면 된다.

 

 

■ 차집합

 

s1 - s2

# 결과: {1,2,3}

s2 - s1

# 결과: {7,8,9}

 - 를 이용한 방법이다.

 

 

s1.difference(s2)

# 결과: {1,2,3}

s2.difference(s1)

# 결과: {7,8,9}

difference 메소드를 이용한 방법이다.

728x90

'백준' 카테고리의 다른 글

백준 1110번 더하기 사이클  (0) 2022.08.04
백준 4344번 평균은 넘겠지  (0) 2022.08.04
백준 2525번 오븐 시계 문제  (0) 2022.05.22