일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- programmers
- EventKit
- MapKit
- Kotlin
- pod install
- SWIFT
- 백준
- SwiftUI_Preview_Provider
- segue
- ios
- Alert
- android
- snapkit
- ios15
- swiftUI
- Appearance변경
- 코딩테스트
- kakaomap
- UIStackView
- Java
- UserDefaults
- CoreLocation
- cocoapods
- alamofire
- image
- format형식
- AsyncImage
- ViewModifier
- NotificationCenter
- autolayout
Archives
- Today
- Total
감자주먹밥
[백준] 2231 분해합 (swift) 본문
728x90
문제
문제 해결
가장 작은 수부터 입력받은 수 전까지 하나씩 올라가며 분해합이 입력받은 값과 맞는지 확인하면 된다.
시간이 많이 들긴 하지만 범위가 크지 않아 성공할 수 있다.
각 자리수의 합은 나머지로 구할 수 있었지만, map과 reduce를 써보고 너무 재미있어서 적용해 봤다.
코드
var input = Int(readLine()!)!
var answer = 0
var sum = 0
for item in (input/2..<input) {
sum = item
sum += (String(item).map{Int(String($0))!}.reduce(0,+))
if sum == input {
answer = item
break
}
}
print(answer)
문제 해결 중 어려웠던 것
문제 해결 후 다른 사람들의 코드를 확인했는데, 시간이 엄청나게 차이가 났다...
처음에 생각할 땐 분해합은 일정 구간 이상부터 검사할 필요가 있겠다 싶었지만 그 위치를 알아내는 방법을 잘 모르겠어서 그냥 시간 복잡도가 높게 나오게 코딩하였다.
지금은 반 으로 줄인 코드긴 하지만 다른 사람들의 코드를 분석할 필요가 있을 것 같다.
다른 방식
let n = Int(readLine()!)!
var result = 0
for i in (n - String(n).count * 9)...n { // 여기서 어떤 이유에서 이렇게 줄였는지를 모르겠어요..
var newN = i
var sum = i
while newN > 0 {
sum += newN % 10
newN /= 10
}
if sum == n {
result = i
break
}
}
print(result)
https://barefoot-coder.tistory.com/27
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 7568 덩치 (swift) (0) | 2022.01.03 |
---|---|
[백준] 2798 블랙잭 (swift) (0) | 2021.12.27 |
Comments