알고리즘 문제 풀이/BOJ

[백준 11653] 소인수분해 - Python3

워킹자몽 2021. 1. 17. 21:59

[백준 11653] 소인수분해 - Python3

<문제>

- 정수 N이 주어졌을 때, 소인수 분해해서 출력하는 문제다.

 

<입력>

정수 N (1<=N<=10,000,000)

 

<출력>

소인수 분해한 결과를 한 줄에 하나씩 오름차순 출력, 1이면 아무것도 출력하지 않는다.

 

<풀이>

(1)

매우 간단하게 풀었다. 반복문을 무한 루프로 돌리면서 나눠서 나누어 떨어지면 출력하고, 아니면 나누는 수를 증가시키는 방향으로 짰다.

처음에 for문으로 N/2까지 돌렸다가 자바처럼 변수가 1씩 증가하는 게 아닌 range 투플 객체 안에 있는 수로 변화하기 때문에 나누는 수의 값이 변하지 않아야 할 때도 변해서 무한루프로 종료 조건을 걸어줬다.

N=int(input())
factor = 2
while 1:
    if N==1:
        break
    if N%factor == 0:
        print(factor)
        N/=factor
        continue
    else:
        factor += 1

factor가 나누는 수, N이 나누어 떨어지면 출력하고, 그렇지 않다면 factor를 증가시켜서 다음 값으로 나누는 식이다. N이 1이 되면 더 이상 소인수분해가 불가능하기도 하고 문제에서 1일 경우 출력하지 않는다고 얘기했기 때문에 반복문의 종료조건을 'N==1'일 때로 정했다.

 

<풀이 인증>

 

수학적 사고력을 쥐어짜 내서 코드로 옮기는 그 능력이 많이 저하됐다고 느꼈는데, 그래도 심각한 수준은 아닌 듯하다. 이런 건 풀 수 있었으니... 얼른 이거 저거 풀어봐야 하는데 아직 TIL이 잔뜩 밀렸다 으아....

 

 

문제 출처 : www.acmicpc.net/problem/11653