문제

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

풀이

  • 1~10000 까지의 값을 배열에 저장한다.
  • 1~10000 까지 루프를 돌면서 셀프넘버를 구한다.
  • 구한 셀프넘버를 배열에서 소거시킨다.
  • 배열에 남은 값들을 출력시킨다.

각각의 셀프 넘버는 값이 들쭉날쭉하게 만들어지고
소거시키는 동작이 엄청 많은 시간을 잡아먹기 때문에
딕셔너리 자료구조를 이용했다.

numbers = {i:1 for i in range(1, 10001)} # 딕셔너리에 저장
for i in range(1, 10001):
    num = i + sum(map(int, str(i))) # 셀프넘버를 구한다.
    numbers[num] = 0                # 딕셔너리에서 해당 셀프넘버 소거
  
for key, val in numbers.items():
    if val == 1: print(key)         # 딕셔너리에 남은 값 출력

댓글남기기