요구능력 : 소인수 분해에 대한 이해도가 있느냐
코드설명 :
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()
}
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
Swift) 백준 4948번 (베르트랑 공준) (0) | 2021.08.09 |
---|---|
Swift) 백준 1929번 (소수구하기) (0) | 2021.08.08 |
Swift) 백준 2581번 (소수) (0) | 2021.08.07 |
Swift) 백준 1978번 (소수) (0) | 2021.08.06 |
Swift) 백준 2839번 (설탕 배달) (0) | 2021.08.06 |
댓글