본문 바로가기
Algorithm/문제풀이_백준

Swift) 백준 11653번 (소인수분해)

by Joahnee 2021. 8. 7.

요구능력 : 소인수 분해에 대한 이해도가 있느냐

 

코드설명 : 

stride를 써준이유는 2...N을 쓰면 N을 자꾸 나눠주기 때문에 N이 더작아지는 상황이 발생한다.

그런데 stride는 그걸 잡아주는 것 같다.

그리고 소인수분해라고 거창할거 없이 나눠지는 작은수부터 나눠주면 그게 소인수분해다.

 

후기 : 생각보다 간단했다. 나는 소수를 구해서 그걸로 나누고 ... 하느냐고 계속 시간초과가 걸렸고 그 코드를 시간줄인다고 고치고 고치다가 3시간이 지나버렸고 찾아보니까 간단하더라 ㅋㅋㅋㅋㅋㅋ허탈하다

과거의 나에게 돌아가서 인터스텔라마냥 고집쳐피우지 말라고 하고싶다.

var N = Int(String(readLine()!))!
if N == 1 {
    print("")
}
for i in stride(from: 2, through: N, by: 1) {
    while N % i == 0 {
        print("\(i)")
        N = N / i
    }
}

3시간이 아까워서 뻘짓한 코드를 올려봅니다.

시간줄일려고 한짓거리

1. print없애고 문자열로받기

2. 수 받을때 Int로 바로 안바꾸고 Sting -> Int로..

3. for문하나 없애고 재귀함수만듦.

var N = Int(String(readLine()!))!
var isPrimeNumber = true
var result = ""
var i = 2
var stop = 1
mmm()

func mmm() {
    if N == 1 {
        return
    }else if N == 2 {
        print("2")
        return
    }
    while N != 1 {
        for j in 2..<i {
            if i % j == 0 {
                // i가 소수가 아님
                isPrimeNumber = false
            }
        }
        if isPrimeNumber {
            if N % i == 0 {
                recursiveN()
            }
        }
        isPrimeNumber = true
        i += 1
        
    }
    print("\(result)")
}

func recursiveN () {
    N = N / i
    result += "\(i)\n"
    if N % i == 0 {
        recursiveN()
    }
}

댓글