본문 바로가기
알고리즘

[Swift] 백준 2231번 분해합

by 고고 2022. 4. 13.

문제: https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라고 합니다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

 

즉, 입력값 N이 분해합인 M을 찾으면 되는 문제입니다.

1부터 N까지 돌며 가장 작은 분해합 M을 찾습니다.

 

분해합은 String으로 한번 감싸고 map으로 한자리씩 끊어서 Int형으로 만들어주고 더했습니다.

ex) 

m = 21

String(m) = "21"

String(m).map { Int(String($0))! } = [2, 1]

String(m).map { Int(String($0))! }.reduce(0, +) = 3

import Foundation

let N = Int(readLine()!)!
var answer = 0

for m in 1...N {
    let sum = m + String(m).map { Int(String($0))! }.reduce(0, +) // 분해합 구하기
    
    if sum == N {
        answer = m
        break // 가장 작은 분해합
    }
}

print(answer)

댓글