[알고리즘] Swift 자릿수 더하기

이유진·2024년 3월 5일
0

알고리즘

목록 보기
13/32

문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.


제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

Nanswer
1236
98724

입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.


풀이 과정1 (03.05)

오늘 알고리즘 문제는 시간이 좀 걸렸다.
오류의 원인과 모르는 부분 확인 이해려면 좀 더 공부가 필요할 것 같다.
일단 이해한 부분 까지 적어보려고 한다.

  1. 자연수 n은 Int 정수형이기 때문에
    문제에서 제시한 각 자릿수의 합을 구하기 위해
    for ~ in 구문 안에서 n을 String Type으로 변환한다.
  2. i를 String으로 바꾸고 Int로 변환한다.
func solution(_ n:Int) -> Int {
    var sum = 0
    
   for i in String(n) {
       sum += Int(String(i)) //Error1
   }
   return sum

}

Error1
Value of optional type 'Int?' must be unwrapped to a value of type 'Int’


**Fix1**
Coalesce using '??' to provide a default when the optional value contains 'nil**Fix2**
Force-unwrap using '!' to abort execution if the optional value contains 'nil'

오류가 난 이유는 Optional Type의 wrap을 풀어주지 않아서!
풀어주기 위해 ! 를 붙여줘야 한다.

Error2
그래서 ! 를 붙여 수정을 해줬는데..! 여전히 오류가 나더라…
찾아보다가 시간이 다 가서 마무리를 못했다.
오늘 혹은 내일까지 마저 찾아보고 수정하도록 해보자 :>

func solution(_ n:Int) -> Int {
    var sum = 0
    
   for i in String(n) {
       sum += Int(String(i))!
   }
   return sum

}

풀이 과정2 (03.06)

오늘은 놓친 부분이 뭔지 찾기 위해
문제를 풀 때 필요한 포인트를 먼저 정리해보려고 한다.

첫 번째 포인트
Int 타입을 String 타입으로 변환하기,
String 타입을 Int 타입으로 변환하기

//정수의 문자열 변환 방법 example

let integerValue = 10

let string1 = "\(integerValue)" //문자열 보간 사용
let string2 = String(integerValue) //문자열 이니셜라이저 사용
//문자열의 정수 변환 방법 example

let stringBalue = "10"
let integer1 = Int(StringValue) 
//Optional(10)
//문자열 내부에 정수가 있다면 정수 이니셜라이저 사용해 변환 가능
//하지만 문자열에 "숫자가 아닌 것을 포함할 수도" 있기 때문에
//옵셔널 값을 리턴한다
//문자를 정수로 변환하는 것은 불가능

let stringValue = "ab"
let integer1 = Int(StringValue) 
//nil

이처럼 String 타입을 Int 타입으로 변환할 때는 옵셔널 값을 반환하기 때문에,
사용하기 위해서는 옵셔널 값을 언랩핑 해주어야 한다.
옵셔널 값을 언랩핑 하기 위해서는 ! 를 붙여주면 된다.

적용
1. for ~ in 구문을 사용해 자릿수의 합을 더하는 과정이 루핑되도록 만들어준다.
2. 루프 상수 자리에 i를 넣어주고, 순회대상 자리에 String 타입으로 변환한 n을 넣어준다.
3. 여기서 i는 Character 타입이므로 String 타입으로 변환하고
4. 계산을 위해 다시 Int로 변환해서 식을 만들어주면
5. 자릿수의 합이 반환된다


Solution

func solution(_ n:Int) -> Int {
    var sum = 0
    
   for i in String(n) {
       sum += Int(String(i))!
   }
   return sum

}

느낀점

그래서 결론은 어제 해결을 했던 게 맞았다.
오류 났던 이유 = 프로그래머스에서 언어 선택을 C로 해뒀더라 ^..^….
다른 언어로 말하고 있으니 이해를 할 리가 없었다.
어쩐지 플레이그라운드에서는 오류가 안뜨더라~
이상 바보짓 끝.. 덕분에 개념 확실히 짚고 갑니다 :>

그리고 이 친구도 고차함수를 이용해 풀 수 있을 것 같으니
오늘 남은 시간에 고차함수 공부를 좀 더 해봐야겠다.


참고자료

https://hyerios.tistory.com/92

1개의 댓글

comment-user-thumbnail
2024년 3월 5일

저 오류들을 일단 그래도 어느정도 이해를 하신다는게 대단한 거 같아요! 전 한국말보다 영어를 더 오래했는데도 오류문구는 이해 불가더라구요.. 앞으로 알고리즘 문제 풀때 참고하겠습니다!

답글 달기