300x250
생성자가 없는 숫자를 구하는 문제이다.
정확히 11개월 전 풀었었는데 다시 풀려고하니 기억이 잘 나지 않아 힘들었다.
https://www.acmicpc.net/problem/4673
self_num = list(range(1,10000))
for i in range(1, 10000):
if i < 10 and i*2 < 20:
self_num.remove(i*2)
elif 10 <= i < 100:
not_self_num = i+int(str(i)[0])+int(str(i)[1])
if not_self_num in self_num:
self_num.remove(not_self_num)
else:
pass
elif 100 <= i < 1000:
not_self_num = i+int(str(i)[0])+int(str(i)[1])+int(str(i)[2])
if not_self_num in self_num:
self_num.remove(not_self_num)
else:
pass
elif 1000 <= i < 10000:
not_self_num = i+int(str(i)[0])+int(str(i)[1])+int(str(i)[2])+int(str(i)[3])
if not_self_num in self_num:
self_num.remove(not_self_num)
else:
pass
for i in self_num:
print(i)
내가 푼 방식은 숫자를 자리수 구간으로 나누고 str으로 변환 후 인덱스로 숫자를 나누어 다시 int형으로 변환하여 더해주는 방식이었다.
이전에 어떻게 풀었나 보니까 정말 대충 풀었었구나 하는 생각이 들었다.
a = list(map(int,range(1,10001)))
b = list(a)
def d(n):
n = str(n)
c = 0
for i in range(len(n)):
c += int(n[i])
c += int(n)
return c
e = 0
for i in range(1, len(a)):
e = d(i)
if e in b:
b.remove(d(i))
for i in range(len(b)):
print(b[i])
쓰는것도 귀찮아서 a, b, c, d, e로 해둔걸 보니 참.. 가지가지 했구나 싶다.
예전에는 더 편하게 풀었던 것 같다. 함수화하여 리턴해주는 방식으로 풀었으며 결국 같은 방법이지만 조금 더 깔끔한 것 같다.
나는 당장의 실력에 부끄러워하거나 스스로를 폄하하는 것 보다는 1년이 지난 후에 퇴보해 있는것이 부끄러운 것이라고 생각한다. 11개월 전의 내가 푼 아주 간단한 문제도 제대로 못 푸는 것을 보니 손을 오래 놓은 티가 난다. 1년 뒤에는 부끄럽지 않을 수 있도록 노력해야겠다.
728x90
'IT > 알고리즘' 카테고리의 다른 글
[백준] 2869 달팽이는 올라가고 싶다. (0) | 2022.01.13 |
---|---|
[백준] 1712 손익분기점 (0) | 2022.01.13 |
[백준] 1152 단어의 개수 (0) | 2022.01.13 |
[백준] 4344 평균은 넘겠지 (0) | 2022.01.11 |
[백준] 4153 직각삼각형 파이썬 (0) | 2022.01.10 |
댓글