baekjoon 11653

윤동환·2023년 1월 6일
0

Algorithm

목록 보기
26/54
post-thumbnail

소인수분해

내가 작성한 코드

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
            
profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글