감자튀김 공장🍟

[백준/11653] 소인수분해 (with 파이썬) 본문

Algorithm/BOJ

[백준/11653] 소인수분해 (with 파이썬)

Potato potage 2022. 10. 30. 21:02
반응형

✔ 문제


풀이

🤢 틀린 코드 (시간 초과)

n = int(input())
nums = []
div = 2

while n >= 0:
    if n % div == 0:
        nums.append(div)
        n = n // div
    else:
        div += 1

print(*nums)

while문 조건이 잘못된 것 같다.

 

👻 정답 코드

n = int(input())
nums = []
div = 2

while n != 1:
    if n % div == 0:
        nums.append(div)
        n = n // div
    else:
        div += 1

print(*nums)

✔ 설명

예제 입력1을 보면 72를 입력 받고 2 2 2 3 3 을 출력한다.

1. 72 // 2 = 36 

2. 36 // 2 = 18

3. 18 // 2 = 9

4. 9 // 3 = 3

5. 3 // 3 = 1

 

72는 2로 나눠지므로 2로 나눈 후, 그 몫(36)을 가지고 다시 나눠지는 가장 작은 수(2)를 구하는 패턴이다.

그래서 div를 2로 고정한 후 div로 나눠진다면 nums 리스트에 나눠지는 수를 저장하고 n에는 나눠진 몫을 저장한다.

만약 현재 div로 나눠지지 않는다면 div += 1을 하여 나눠질때까지 계속 반복한다.

 

 

 

 

 

 

 

반응형
Comments