[Swift][프로그래머스] 자릿수 더하기 - Swift의 문자와 문자열 (character)

팔랑이·2024년 3월 29일
0

iOS/Swift

목록 보기
7/71
post-thumbnail

서론: 풀이와 코드 설명

💻 프로그래머스: 자릿수 더하기 - 문제 링크

👇🏻 Python 풀이

import sys
input = sys.stdin.readline

num = list(map, int(input().rstrip()))
    
print(sum(newnum))

이렇게 풀고 Swift로 옮겨보았다.

👇🏻Swift 풀이

import Foundation

func solution(_ n:Int) -> Int
{
    let num = String(n).compactMap{Int(String($0))}

    return num.reduce(0,+)
}

말이야 간단하게 써놓긴 했지만 옮기는 과정에서 시행착오가 많았다.
자료형 쓰는법이나 메서드 대소문자 같은게 파이썬이랑 달라서 아직도 안 익숙...

코드 설명

  • 정수 n을 String으로 받으면 문자 배열로 바뀐다.
  • 이를 nil을 허용하지 않는 compactMap으로 받아서, 각각 Int로 변환하여 num 리스트에 담는다.
  • num 리스트의 합(합을 구하는 방법에 대한 포스트는 여기에)을 reduce로 구한다.

본론: Swift의 character?

가장 이해되지 않는 부분이 Int로 변환할 때 String으로 한번 더 감싸는 부분이었는데, 이는 문자와 문자열 자료형에 대한 Python과 Swift의 차이에서 비롯된다.

  • Python에서는 문자와 문자열을 구분하지 않는다. 따라서 str 자료형을 list로 감싸면, 각각 개별 요소들이 str이 된다.

    num = 1234
    str_num = str(num)  # 숫자를 문자열로 변환: "1234"
    list_str = list(str_num)  # 문자열을 리스트로 변환: ['1', '2', '3', '4']

    위 예시에서 '1', '2', '3', '4' 각각의 자료형은 str 이 되는 것이다.

  • Swift에서는 문자열의 시퀀스를 String이라고 부르며, 단일 문자열을 character 라는 자료형으로 구분하여 처리한다.

    let num = 1234
    let strNum = String(num)  // 숫자를 문자열로 변환: "1234"
    let charactersArray = strNum.map { String($0) }  // 문자열의 각 문자를 String 배열로 변환: ["1", "2", "3", "4"]

    위 코드와 같이 "1234"를 map으로 처리할 경우, 각각의 요소가 String이 아닌 character 자료형으로 받아진다. 그런데 character를 Int로 바로 변환할 수 없기 때문에, String으로 한번 더 묶어준 후 변환해 주는 것.

결론

이런걸 좀 기초부터 이해하며 차근차근 알아나가야 할 것 같다. 자유자재로 Swift 코드를 짜는 날이 빨리 오길!

다른 사람의 코드를 보던 중 클로저를 예술적으로 활용한 코드를 봤는데, 이를 남기며 글을 마무리한다.

return String(n).reduce(0, {$0 + Int(String($1))!})
profile
정체되지 않는 성장

0개의 댓글