[백준 / 4673] 셀프 넘버
in Problem Solving on BaekJoon
날짜: 2021년 6월 15일
소요 시간: 1시간 26분 34초
카테고리: 수학문제
태그: silver.5
, 4673
, 파이썬
입출력 예시
예제 출력 | |
---|---|
1 | |
3 | |
5 | |
7 | |
a lot more numbers | |
9971 | |
9982 | |
9993 |
내가 적은 코드
arr = set(range(1, 10000))
del_arr = set()
for num in arr:
for i in str(num):
num += int(i)
del_arr.add(num)
answer = sorted(arr - del_arr)
print("\n".join(map(str, answer)))
풀이 과정
arr
에 10000까지 저장하고 del_arr
에 생성자가 존재하는 수를 저장한 뒤,
set
함수를 통해 answer
에 arr
에서 del_arr
을 제외하는 방식으로 셀프 넘버의 배열을 구하는 방식으로 풀었다.
베스트 코드
def self_num(x):
a = int(x)
if a > 10000:
return
else:
for j in range(len(x)):
a += int(x[j])
if a > 10000:
return
check[a] = True
self_num(str(a))
check = [False]*10001
for i in range(1, 10000):
self_num(str(i))
for i in range(1, 10000):
if check[i] ==False:
print(i)
반성
- 이제 브론즈 문제는 쉽게 풀겠는데 실버 문제에 대해서는 아직 시간이 너무 오래걸리는 것 같다. 실버 문제 또한 30분 안에 풀 정도로 알고리즘 문제에 익숙해 질 필요가 있다.
- 재귀 함수로 풀고 싶었으나 재귀 함수에 이해도가 낮아서 포기하고 다른 방식으로 풀었다. 다양한 방식으로 문제를 풀 수 있을 정도로 문제를 많이 풀어봐야겠다.
재귀 함수로 풀고 싶어서 베스트 코드로 재귀함수를 들고 오긴 했으나 아이러니하게도 재귀 함수로 풀면 시간이 45배 정도 더 걸린다. 사실 베스트 코드는 아닌걸로…