Where who wants to meet someone

백준 Swift [11653] 소인수분해 본문

백준 알고리즘 문제 기록/약수, 배수와 소수

백준 Swift [11653] 소인수분해

Lust3r 2023. 7. 1. 18:22
728x90

난이도

브론즈 I

 

문제

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

 

내 답안

var n = Int(readLine()!)!
// 반복문을 하나만 사용할 것이라 나누는 수를 나타낼 프로퍼티 i 생성(초기 2)
var i = 2

// n이 1이 될 때까지 반복
while n != 1 {
    // n을 i로 나눈 나머지가 0이라면(소인수분해가 정상적으로 진행되면)
    if n % i == 0 {
        // n을 i로 나눈 몫으로 변경 및 현재 나누는 수 출력
        n /= i
        print(i)
    } else {
        // 나머지가 0이 아니라면 i값 증가
        i += 1
    }
}

- 소인수분해는 1보다 큰 자연수를 소인수(소수인 인수)들만의 곱으로 나타내는 것 또는 합성수를 소수의 곱으로 나타내는 방법을 말한다.
(출처: 위키백과)

- 소수인 인수로만 해야하는데 i를 어떻게 늘려줄까 고민하다가(2, 3, 5, 7등 케이스가 띄엄띄엄 있어서) 어차피 낮은 수부터 차례차례 진행하게 된다면 대개 2, 3선에서 정리가 되고 많아져봐야 나머지가 0이 아닌 케이스에서 걸러지는 등 그 수까지만 올라갈 것이기 때문에 1씩 늘려도 괜찮겠다 싶었다.