MUKER_DEV with iOS

[swift] λ°±μ€€ - 19757번: 큰 수 A + B λ³Έλ¬Έ

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

[swift] λ°±μ€€ - 19757번: 큰 수 A + B

MUKER 2023. 2. 19. 17:06
 

10757번: 큰 수 A+B

두 μ •μˆ˜ A와 Bλ₯Ό μž…λ ₯받은 λ‹€μŒ, A+Bλ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

www.acmicpc.net

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

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

 


 

λ‚˜μ˜ 풀이

let input = readLine()!.split(separator: " ")
let aCount = input[0].count
let bCount = input[1].count
let maxCount = max(aCount, bCount)
var a = Array(repeating: 0, count: maxCount)
var b = Array(repeating: 0, count: maxCount)
var result = Array(repeating: 0, count: maxCount)

for (index,i) in input[0].enumerated() {
    a[maxCount - aCount + index] = Int(String(i))!
}
for (index,i) in input[1].enumerated() {
    b[maxCount - bCount + index] = Int(String(i))!
}
for i in (0..<maxCount).reversed() {
    let sum = a[i] + b[i]
    if i == 0 { result[i] += sum }
    else {
        result[i-1] = (result[i]+sum) / 10
        result[i] = (result[i]+sum) % 10
    }
}
print(result.map { String($0) }.joined())

 

- A+Bλ₯Ό κ΅¬ν•˜λŠ” μ‰¬μš΄ λ¬Έμ œμ§€λ§Œ...

input을 Int둜 λ³€ν™˜ν•œλ‹€λ©΄ λ²”μœ„λ₯Ό μ•„λ“νžˆ λ„˜μ–΄κ°€κΈ° λ•Œλ¬Έμ—

λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό λ±‰λŠ”λ‹€..

 

- κ·Έλž˜μ„œ μ‚¬μš©ν•΄ λ³Έ 풀이방법은

a와 b쀑 큰 κ°’μ˜ count 만큼의 길이의

λ””ν΄νŠΈκ°’μ΄ 0인 배열을 두 개 μƒμ„±ν•˜κ³ 

 

- inputκ°’ 각각의 숫자λ₯Ό

a와 b λ°°μ—΄μ˜ μ•Œλ§žμ€ μΈλ±μŠ€μ— 넣어쀬닀.

 

- input값이 (999, 1)이라면

a = [9,9,9]

b = [0,0,1]

인 λ°°μ—΄ λ‘κ°œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

 

- λ‚˜λ¨Έμ§€λŠ”

a와 b 인덱슀λ₯Ό κ°κ°λΉ„κ΅ν•˜λ©°

10을 μ΄ˆκ³Όν•œλ‹€λ©΄

μœ—μžλ¦¬λ‘œ 1을 μ˜¬λ €μ€¬λ‹€.

 

- μ΄λ ‡κ²Œ μ •μˆ˜ν˜•μœΌλ‘œ 계산을 마쳀으면

λ¬Έμžμ—΄λ‘œ 합쳐 λ°˜ν™˜ν•΄ μ£Όλ©΄ λœλ‹€.