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

Swift) 백준 2231번 (분해합)

by Joahnee 2021. 8. 18.

요구능력 : 경우의수를 전부따지는 브루트포스 알고리즘에 대해 알고있느냐

 

코드설명 : 

우리가 구하고자 하는 수는 n이 256이면 256의 생성자 245이다.

245가 생성자인 이유는 245 + 2 + 4 + 5 = 256 이기 때문이다.

 

1. n으로 생성자를 구할 수를 받는다.

 

2. 1 ~ n 까지 수를 245 + 2 + 4 + 5 = 256 이 방법으로 n이 되는 경우를 찾기위해 쭉 돌린다.

 

3. 드디어 생성자구하는 방법으로 i로 인해 생성자가 구해지면 (sum == n이 되면) i가 생성자 수가되니까 출력해준다.

break해주는 이유는 가장작은 생성자를 구하라고 했기 때문이다.

맨 처음에 sum == n이 성립되면 그게 가장작은 수이다.

 

4. 만약 sum == n이 성립되지 않으면 생성자가 없다는 말이다. 그렇다면 realI는 0인 채로 존재할 것이다.

그 때는 0을 출력해주고 아닌경우에는 realI를 출력해주어 생성자를 출력해준다.

 

 

후기 : 무난하게 전체경우의수를 따져본다고 생각하며 풀었다.

let n = Int(readLine()!)!
var sum = 0
var realI = 0

for i in 1...n { //1번
    sum = i
    for j in String(i) { //2번
        sum += Int(String(j))!
    }
    if sum == n { //3번
        realI = i
        break
    }
}
if realI == 0 { //4번
    print("0")
}else {
    print("\(realI)")
}

댓글