MUKER_DEV with iOS

[swift] λ°±μ€€ - 2231번: λΆ„ν•΄ν•© λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 2231번: λΆ„ν•΄ν•©

MUKER 2023. 2. 1. 21:45
 

2231번: λΆ„ν•΄ν•©

μ–΄λ–€ μžμ—°μˆ˜ N이 μžˆμ„ λ•Œ, κ·Έ μžμ—°μˆ˜ N의 뢄해합은 Nκ³Ό N을 μ΄λ£¨λŠ” 각 자리수의 합을 μ˜λ―Έν•œλ‹€. μ–΄λ–€ μžμ—°μˆ˜ M의 뢄해합이 N인 경우, M을 N의 μƒμ„±μžλΌ ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 245의 뢄해합은 256(=245+2+4+5)이

www.acmicpc.net

문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

문제 μ„€λͺ…

 

브루트포슀 μ•Œκ³ λ¦¬μ¦˜μ— κ΄€λ ¨ν•œ 문제둜

μ—¬λŸ¬ 경우의 수λ₯Ό λŒ€μž…ν•˜μ—¬

μ›ν•˜λŠ” 값을 ꡬ할 수 μžˆλ‹€.

 

Tλž€ μˆ«μžκ°€ 있고

T의 각 자릿수λ₯Ό λ”ν•΄μ„œ

Nμ΄λΌλŠ” 값이 λ‚˜μ˜¨λ‹€λ©΄

T와 T의 κ°μžλ¦¬μˆ˜λ“€μ€ N의 뢄해합이라고 ν•œλ‹€.

 

μž…λ ₯κ°’μœΌλ‘œ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ T에 ν•΄λ‹Ήν•˜λŠ” μ΅œμ†Ÿκ°’μ„ ꡬ해야 ν•œλ‹€.

λ§Œμ•½ 뢄해합이 μ—†λ‹€λ©΄ 0을 λ¦¬ν„΄ν•œλ‹€.

 


 

λ‚˜μ˜ 풀이

var input = readLine()!
var num = Int(input)!
var figure = input.map { $0 }.count * 9
var start = num-figure >= 0 ? num-figure : 0
var result = 0
for i in start...num {
    let temp = i
    let sum = String(temp).map { Int(String($0))! }.reduce(0,+) + temp
    if sum == num {
        result = temp
        break
    }
}
print(result)

 

0λΆ€ν„° λ°±λ§ŒκΉŒμ§€ λ°˜λ³΅λ¬Έμ„ λŒλ €μ„œ

μž…λ ₯κ°’μ˜ 뢄해합을 찾을 수 μžˆκ² μ§€λ§Œ

λΉ„νš¨μœ¨μ μΈ μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ λ°˜λ³΅λ¬Έμ„ 돌리기 μœ„ν•œ μ΅œμ†Œμ‘°κ±΄μ˜ 값을 μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€.

그건 μž…λ ₯κ°’μ˜ μžλ¦Ώμˆ˜μ—μ„œ 찾을 수 μžˆμ—ˆλŠ”λ°μš”

 

μž…λ ₯값이 256이라면

3 자릿수이기 λ•Œλ¬Έμ—

각 μžλ¦Ώμˆ˜λ§ˆλ‹€ μ΅œλŒ€ 9개의 μˆ«μžκ°€ λ‚˜μ˜€κ² μ£ ? (1~9)

0은 λ”ν•˜λ‚˜ λ§ˆλ‚˜ μƒκ΄€μ—†μœΌλ‹ˆκΉŒμš”.

 

μž…λ ₯κ°’ - 각자릿수 * 9λ₯Ό μ‹œμž‘μœΌλ‘œ

μž…λ ₯κ°’κΉŒμ§€ 뢄해합을 μ°ΎκΈ° μœ„ν•œ λ°˜λ³΅λ¬Έμ„ λŒλ ΈμŠ΅λ‹ˆλ‹€.

 

ν’€λ©΄μ„œ 마주쳀던 였λ₯˜λŠ”

μž…λ ₯값이 λ°˜λ³΅μ‹œμž‘κ°’(μž…λ ₯κ°’ - 각자릿수 * 9) 보닀 μž‘λ‹€λ©΄

μŒμˆ˜κ°€ λ˜λ©΄μ„œ map을 λ„λŠ” κ³Όμ •μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

 

λ”°λΌμ„œ start값이 0보닀 μž‘λ‹€λ©΄ μ•„μ˜ˆ 0으둜 λͺ…μ‹œν–ˆμŠ΅λ‹ˆλ‹€.

 


 

μ°Έκ³ ν• λ§Œν•œ 풀이

let input = Int(readLine()!)!
var result = 0
for i in input-String(input).count*9...input {
	var num = i
	var sum = 0
	while num > 0 {
		sum += num%10
		num /= 10
	}

	if sum + i == input {
		result = i
		break
	}
}
print(result)