소인수분해
내가 작성한 코드
N = int(input())
i = 2
while N != 1:
if N % i != 0:
i += 1
else:
print(i)
N = N / i
고민한 사항
- 2로 나누다가 안나눠져서 3으로 나누었을 때 다시 2로 나눠지는 경우가 있는가?
-> 처음엔 나눠 질수도 있을 거 같아 앞서 구현했던 소수 찾는 로직을 활용하여 구현하였으나 시간초과가 발생함..
- 2로 나누지 못하는 경우에 다시 2로 나눠질 수 없다는 사실을 깨달았고 (약수 개념) 위와 같은 방식으로 구현하였다.
- 몫은 1이 딱 나누어 떨어지는 의미를 놓치고 while 조건은 N != 0으로 했었다가 while을 한번 더 돌아 range error가 발생하였다.
처음 구현한 코드
N = int(input())
answer = []
if N != 1:
arr = [x for x in range(N + 1)]
arr[1] = 0
for a in range(N + 1):
if arr[a] != 0:
answer.append(arr[a])
for c in range(a * 2, N + 1, a):
arr[c] = 0
i = 0
while N != 1:
if N % answer[i] != 0:
i += 1
else:
print(answer[i])
N = N / answer[i]
i = 0