알고리즘 문제 풀이/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