Where who wants to meet someone
두 수의 합 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181846
내 답안 / 다른 사람들의 답안
import Foundation
func solution(_ a:String, _ b:String) -> String {
var a = a.map { Int(String($0))! }
var b = b.map { Int(String($0))! }
var result = [Int]()
var upNumber = 0
if a.count < b.count {
a = Array(repeating: 0, count: b.count - a.count) + a
} else if a.count > b.count {
b = Array(repeating: 0, count: a.count - b.count) + b
}
while !a.isEmpty {
let sum = a.removeLast() + b.removeLast() + upNumber
upNumber = sum / 10
result.append(sum % 10)
}
if upNumber != 0 {
result.append(upNumber)
}
return result.map { String($0) }.reversed().joined()
}
- 1) 과정의 편리함을 위해(10 이상의 수 체크 및 나머지 값 추가) a와 b를 Int의 배열로 변환
2) 결과를 저장할 result, 10 이상의 수를 저장할 upNumber 프로퍼티 선언
3) 한 숫자의 배열이 다른 숫자 배열보다 자릿수가 부족하다면 그만큼 0으로 채운 배열을 앞쪽에 추가하여 자릿수는 맞추되 값에 영향이
없도록 처리
4) 한 숫자의 배열이 비어있을 때까지 while문 내에서 각 배열의 마지막 값을 뽑아 덧셈 진행
마지막 값들과 upNumber를 더하고, 더한 값을 10으로 나눈 몫을 upNumber에 저장하고, 나머지는 result에 append
5) 이 과정이 모두 끝났는데 upNumber에 값이 남아있다면(!= 0) result에 추가
6) result는 역순으로 되어있기 때문에 map을 통해 String으로 형변환을 하고 reversed를 해준 다음 joined를 해주어 String으로 반환
// 풀이 1
func solution(_ a: String, _ b: String) -> String {
var result = ""
var carry = 0
var i = a.count - 1, j = b.count - 1
let aArr = Array(a).map { Int(String($0))! }, bArr = Array(b).map { Int(String($0))! }
while i >= 0 || j >= 0 || carry > 0 {
var sum = carry
if i >= 0 {
sum += aArr[i]
i -= 1
}
if j >= 0 {
sum += bArr[j]
j -= 1
}
result = "\(sum % 10)" + result
carry = sum / 10
}
return result
}
// 풀이 2
import Foundation
func solution(_ a:String, _ b:String) -> String {
var ans = Array(repeating: 0, count: max(a.count, b.count)+1)
let (a, b) = (a.reversed().map{Int(String($0))!}, b.reversed().map{Int(String($0))!})
for i in 0..<ans.count-1{
let A = i < a.count ? a[i] : 0
let B = i < b.count ? b[i] : 0
ans[i+1] = (A+B+ans[i]) >= 10 ? 1 : 0
ans[i] = (A+B+ans[i]) % 10
}
if ans.last! == 0 {
ans.removeLast()
}
return ans.reversed().reduce("") { $0 + "\($1)"}
}
점수: +2
'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글
전국 대회 선발 고사 (0) | 2024.03.16 |
---|---|
무작위로 K개의 수 뽑기 (0) | 2024.02.18 |
커피 심부름 (0) | 2024.02.16 |
문자열이 몇 번 등장하는지 세기 (0) | 2024.02.16 |
문자열 묶기 (0) | 2024.02.14 |