[완전 탐색] 백준 브론즈2 2231번: 분해합(Swift)

2023. 5. 12. 17:04·코테

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

 

2231번: 분해합

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

www.acmicpc.net

풀이과정

분해합 문제의 경우 특정수 N에 대하여 생성자를 찾는 문제이다.

생성자 M은 [ M + M의 각 자릿수의 합 = N ] 위 조건을 만족하는 가장 작은 수이다.

위 문제의 경우 1부터 주어진 수 N까지 반복문을 통해 하나씩 대입해도 312ms 시간으로 통과한다.
하지만, 그것이 문제 출제의도는 아닌 것 같아 조건을 통해 시간을 단축시켜 보자.

위에서 언급했듯 생성자 M은 [ M + M의 각 자릿수의 합 = N ] 위 조건을 만족해야 한다.

그럼 식을 [ M = N - M의 각 자릿수의 합 ] 위와 같이 바꿔줄 수 있다. 여기서 M이 3자리 수라 가정했을 때 "M의 각 자릿수의 합"의 최댓값은 9 + 9 + 9로 27이다.

즉, 자릿수 * 9가 "M의 각 자릿수의 합"에 올 수 있는 최댓값이 된다.

그럼 그 뜻은 세 자리 수의 M은 N - 27보다 크고 N보단 작다.

하지만, N이 18 이상부터 위 조건이 가능하기에 18이하 면 1부터 탐색한다.

Code
let n = readLine()!
let num = Int(n)!
var sum = 0
var m = 0
var start = 1

if num > 18 { startN = num - n.count * 9 }

for i in start..<num {
  sum = i
  for j in String(i) {
    sum += Int(String(j))!
  }
  
  if sum == num {
    m = i
    break
  }
}

print(m)
저작자표시 (새창열림)

'코테' 카테고리의 다른 글

[그리디] 백준 브론즈1 4796번: 캠핑(Swift)  (0) 2023.05.15
[이분 탐색] 백준 실버2 2805번: 나무 자르기(Swift)  (0) 2023.05.12
[구현 + 시뮬레이션] 백준 2578번: 빙고  (0) 2023.05.08
[DFS] 백준 9466번: 텀 프로젝트(Swift)  (0) 2022.12.03
[DFS] 백준 1068번: 트리(Swift)  (0) 2022.11.18
'코테' 카테고리의 다른 글
  • [그리디] 백준 브론즈1 4796번: 캠핑(Swift)
  • [이분 탐색] 백준 실버2 2805번: 나무 자르기(Swift)
  • [구현 + 시뮬레이션] 백준 2578번: 빙고
  • [DFS] 백준 9466번: 텀 프로젝트(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    회고
    재귀
    탐색
    다이나믹 프로그래밍
    Combine
    알고리즘
    코딩테스트
    dfs
    이분탐색
    ios
    구현
    photoUI
    백준
    브루트포스 알고리즘
    photos
    그리디
    Race Condition
    PhotoKit
    코테
    실버
    GCD
    BFS
    노드
    Swift
    비동기
    Property wrapper
    동시성
    네부캠
    완전탐색
    챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[완전 탐색] 백준 브론즈2 2231번: 분해합(Swift)
상단으로

티스토리툴바