❓ 오늘의 문제
1. 자릿수 더하기
- 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return 하도록 solution 함수를 완성해 주세요
나의 정답 코드
import Foundation
func solution(_ n:Int) -> Int {
let strNum = String(n)
var result = 0
for i in strNum {
if let transChatoInt = i.wholeNumberValue {
result += transChatoInt
}
}
return result
}
✓ TIL
[ 처음 코드 ]
func solution(_ n:Int) -> Int {
var strNum = String(n)
var result = 0
for i in strNum {
var transInt = Int(i)
result += transInt
}
return result
}
처음 문제를 접하고 나는 for문을 사용해서 문자열로 변환된 strNum을 가지고
한 자리씩 방문하여 반복문을 돌리면서 방문한 문자를 Int형으로 변환하고
그 값을 result 변수에 저장하려고 했다.
하지만 내 코드에는 2가지 문제점이 있었다.
먼저 for i in strNum에서 i는 Character 타입이다.
Int(i)는 Character를 바로 Int로 바꾸려고 하는데, 이건 옵셔널(Int?)를 반환하게 된다.
실제로는 transInt가 nil이 되기 때문에 컴파일 에러가 발생한다.
또한 옵셔널을 처리하지 않고 바로 result += transInt를 하려고 하면 컴파일 에러가 발생한다.
이전 코드의 문제점을 해결하기 위해서 새로운 프로퍼티를 배웠다.
이전 코드에서 나는 character을 바로 Int로 변환하려고 했었다.
내가 원하는 동작을 해주는 프로퍼티가 바로 wholeNumberValue였다!
먼저 wholeNumberValue에 대한 애플의 공식문서를 살펴보자!
wholeNumberValue | Apple Developer Documentation
The numeric value this character represents, if it represents a whole number.
developer.apple.com
wholeNumberValue는 문자가 의미하는 숫자값을 반환해 주는 데, 그 값이 whole number이어야 한다.
여기서 whole number란 0과 자연수를 의미한다. 즉 음수의 값을 변환할 수 없다는 것이다!
다음은 공식 문서의 사용 예시이다.
let chars: [Character] = ["4", "④", "万", "a"]
for ch in chars {
print(ch, "-->", ch.wholeNumberValue)
}
// Prints:
// 4 --> Optional(4)
// ④ --> Optional(4)
// 万 --> Optional(10000)
// a --> nil
위의 코드와 같이 숫자의 의미를 가지는 문자를 숫자로 바꿔준다. 대박...
wholeNumberValue는 옵셔널 정수형이기 때문에 if let이나 guard let으로 사용한다.
[ 수정 코드 ]
import Foundation
func solution(_ n:Int) -> Int {
let strNum = String(n)
var result = 0
for i in strNum {
if let transChatoInt = i.wholeNumberValue {
result += transChatoInt
}
}
return result
}
wholeNumberValue를 사용해서 위와 같이 코드를 수정했다.
for문 안에 i.wholeNumberValue를 사용해서 문자로 들어온 i를 숫자로 변경한다.
그 후 옵셔널을 풀어주기 위해서 if let을 사용하여 옵셔널 바인딩을 하였다
그리고 result에 Int로 변환된 값들을 더해주었다.
이 방법으로 문제를 해결하였다!
😼 GitHub
'스파르타 코딩 클럽 - iOS 스타터 6기 > 알고리즘 코드카타' 카테고리의 다른 글
32. 스파르타 코딩 클럽 - 5월 30일 코딩테스트 연습 (코드카타) (1) | 2025.05.30 |
---|---|
31. 스파르타 코딩 클럽 - 5월 29일 코딩테스트 연습 (코드카타) (1) | 2025.05.29 |
29. 스파르타 코딩 클럽 - 5월 19일 코딩테스트 연습 (코드카타) (0) | 2025.05.19 |
28. 스파르타 코딩 클럽 - 5월 8일 코딩테스트 연습 (코드카타) (0) | 2025.05.08 |
27. 스파르타 코딩 클럽 - 5월 7일 코딩테스트 연습 (코드카타) (0) | 2025.05.07 |