욤찌의 개발 일기
[Programmers/Lv.1] 자릿수 더하기 본문
Lv.1 연습문제
https://school.programmers.co.kr/learn/courses/30/lessons/12931
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
자릿수 더하기
문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
N의 범위 : 100,000,000 이하의 자연수
내 답안
func solution(_ n: Int) -> Int {
var result = 0
var str = String(n)
for i in str {
result += Int(String(i))!
}
return result
}
풀이
1. n 의 각 자릿수의 숫자를 가져오기 위해 먼저 String으로 바꿔준다.
왜냐면 String 타입은 Character 타입 요소들의 Collection으로 간주되기 때문에 문자 하나하나를 Character 타입으로 가져올 수 있음!
(String은 Collection 프로토콜을 준수하고 있음)
2. String(n)의 값을 가진 변수 str 을 for-in 반복문으로 Character 하나씩 꺼내서 다시 Int 형으로 바꿔준다.
여기서 루프 상수 i 는 타입이 Character이기 때문에 먼저 String으로 변환한 후에 Int로 변환 가능함
String에서 Int로 형변환 할때는 옵셔널 타입이기 때문에 언래핑 해줘야함. 근데 여기서는 무조건 Int로 변환 될 것이라고 예상하기 때문에 강제언래핑 해줌 (반대로 Int에서 String으로 형변환할때는 옵셔널 아님. 무조건 변환 가능하기 땜시)
3. Int로 변환한 값을 result 변수에 더해서 다시 값을 할당한다.
다른 답안
func solution(_ n: Int) -> Int {
return String(n).map { Int(String($0))! }.reduce(0) { $0 + $1 }
}
사실 예전에 Lv.0 에서 같은 문제를 풀었었고 이전에 통과 했던 답변 ,,
n을 String으로 형변환해서 Collection 으로 만들고 map 고차함수를 이용해서 클로져에 넘겨받는 Character 요소들을
String -> Int 형변환하고 강제언래핑 해준다. 그리고 reduce 고차함수로 0부터 요소 하나씩 더해준다.
고차함수를 꼭 사용할 필요는 없겠지만,, 이용하면 아주쥬주주 간단해질 수 있는 부분..!
예전에 풀었던 문제인데 ,, 너무 오랜만에 코테 공부를 했더니 고새 다 까먹어버린 ,,^^
넘 충격적이여서 블로깅 해본다🥹
사실 이전에 Lv.0 에서 풀었을 때는 그냥 다른 사람들이 Int타입에서 자릿수마다의 요소 하나씩 가져올 때 String으로 변환해서 사용하길래 아무 생각없이 그냥 따라 사용해서 기억에 안남았던듯 함..
왜 이렇게 사용하는가 정확히 알고싶어서 문자와 문자열에 대해 찾아봤고, Int 를 String으로 형변환하는 이유가 String이 Character 타입 요소들의 Collection 이라는 것을 알게 되었음! 그래서 마치 배열처럼 사용할 수 있던거였움!
아주 예전에 알고있었던 것 같은데 완전히 잊어버리고 있다가 이번에 다시 공부하게 되었다.
그래서 조만간 문자와 문자열 공식문서도 한 번 파볼 예정 ,,