본문 바로가기
코딩테스트/문제풀이-1

[필수] 2231 분해합

by apple망고 2024. 1. 20.
import Foundation

let N = Int(readLine()!)!

for num in 1...N { 
    let disassembleSum = num + String(num).compactMap { $0.wholeNumberValue }.reduce(0, +) // 해당 숫자의 분해합을 구해서
    
    if disassembleSum == N { 
        print(num) 
        break 
    }
    
    if num == N { 
        print(0) 
    }
}

 

코드 설명

  • 입력 값 N에 저장한다.
  • 생성자은 항상 N보다 작다.
  • 1부터 N을 for문으로 순회하면서 생성자의 분해합과 입력값이 같은 경우를 찾는다.
  • N까지 순회가 끝날 때까지 생성자를 찾지 못한다면 0을 출력한다.

메서드 설명

  • String: 입력값을 문자로 변환한다.
  • compactMap { $0.wholeNumberValue }: 문자열의 각 문자를 숫자로 변환한다.
  • reduce(0, +) 생성된 숫자 배열의 모든 요소를 더합니다. 0은 초기 시작 기본값입니다.

 

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

 

2231번: 분해합

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

www.acmicpc.net

 

'코딩테스트 > 문제풀이-1' 카테고리의 다른 글

[선택] 10818 최소, 최대  (0) 2024.01.25
[선택] 10995 별찍기 - 20  (0) 2024.01.25
[선택] 2438 별 찍기 -1  (0) 2024.01.22
[선택] 10869 사칙연산  (0) 2024.01.22
[필수] 8892 팰린드롬  (0) 2024.01.22
[필수] 8958 OX퀴즈  (0) 2024.01.22
[필수] 2711 오타맨 고창영  (0) 2024.01.21
[필수] 1302 베스트셀러  (0) 2024.01.20