-
[백준 11653] 소인수분해 - Python3알고리즘 문제 풀이/BOJ 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
'알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
[백준 1018] 체스판 다시 칠하기 - Python3 (0) 2021.02.15 [백준 2231] 분해합 - Python3 (0) 2021.02.08 [백준 1002] 터렛 - Python3 (0) 2021.01.23 [백준 9506] 약수들의 합 - Python3 (0) 2021.01.10 [백준 1920] 수 찾기 (이진 탐색) - Python3 (0) 2021.01.03