자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
주어진 숫자 n
을 문자열로 변환한다. 그리고 문자열이 된 n
을 한글자씩 쪼개서 for문을 사용하여 각 자릿수를 배열에 추가하려고 했다.
나한테 이게 좀 더 절차적인 접근 방식이었는데, 문자열의 각 문자를 순회하며 배열에 추가하는 방법으로 for문을 사용할 수 있었지만, map을 사용하는 것이 더 간결하고 효율적이었다.
func solution(_ n: Int64) -> [Int] {
var arr: [Int] = String(n).map { Int(String($0))! }
return Array(arr.reversed())
}
n
을 문자열로 변환하고, 각 자릿수를 분해하여 배열로 만드는 과정을 진행 이때 String(n).map { Int(String($0))! }
을 사용하여 숫자의 각 자릿수를 분해한 배열을 얻었다.String(n)
: 숫자 n
을 문자열로 변환.map { Int(String($0))! }
: 문자열의 각 문자를 순회하며 정수로 변환하는 과정$0
은 문자열의 각 문자(Character
)를 의미한ㄷㅏ.String($0)
: 각 문자를 문자열로 변환. (Swift에서는 Character
를 직접 Int
로 변환할 수 없으므로 문자열로 한 번 더 변환해야 한다.)Int(String($0))!
: 변환된 문자열을 정수로 변환. (!
를 사용하여 강제 언래핑을 하기 때문에, 입력이 확실히 숫자임을 알고 있을 때 사용해야함.)[Int]
형태로 된다."12345"
는 [1, 2, 3, 4, 5]
로 reversed()
를 사용하여 배열의 순서를 뒤집는다. Array()
로 감싸서 배열 형태로 변환.a.count
까지의 값을 배열에 추가하고, 그 배열을 뒤집는 방식이었다.for
문을 사용하여 각 자릿수를 배열에 추가하려고 했었다. 문자열의 각 문자를 순회하며 배열에 추가하는 방법으로 for
문을 사용할 수 있었지만, map
을 사용하는 것이 더 간결하고 효율적이었다. 사실 코드 제출 했을 때 틀리지 않았더라면 이 방식으로 제출했을 것 같다. (테스트 성공 후 제출 때 왕창 에러남)원래 목표였던 코드인 모양(수정 본)
func solution(_ n: Int64) -> [Int] {
var arr: [Int] = []
let str = String(n)
for char in str {
if let digit = Int(String(char)) {
arr.append(digit)
}
}
return Array(arr.reversed())
}
str
의 각 문자를 돌면서, 각 문자를 정수로 변환하여 배열 arr
에 추가. 이렇게 하면 map
을 사용하지 않고도 동일한 결과를 얻을 수 있다.reversed()
를 사용하고, 최종 결과를 배열로 다시 변환하는 방식이 필요하다는 점을 배웠다.reverse()
는 반환값이 없고, reversed()
는 새로운 컬렉션을 반환한다는 중요한 차이점을 알게 되었다. map { Int(String($0))! }
을 사용하여 각 문자를 정수로 변환할 수 있다는 점을 알게 되었다.map
과 for
문의 차이점을 이해하고, 코드의 간결성과 효율성을 고려하여 상황에 맞는 방식을 선택하는 것이 중요하다는 것을 깨달았다.아무튼 해결하는 과정을 통해 성장했다. 근데 타입지정 매우 엄격해서 자바스크립트 쓰는 것 처럼 물렁하게 하면 안되는데 기강안잡혀있는거 완전 범죄다.