본문 바로가기

Algorithm의 모든것

[Algorithm의 모든것] (Swift)프로그래머스-자연수 뒤집어 배열로 만들기

문제

프로그래머스의 [자연수 뒤집어 배열로 만들기]

 

코드 보기
더보기
내 풀이
func solution(_ n:Int64) -> [Int] {
    return (String(n).map{String($0)}.map{Int($0)} as! [Int]).reversed()
}
다른 사람의 풀이
func solution(_ n:Int64) -> [Int] {
    return  "\(n)".compactMap { $0.hexDigitValue }.reversed()
}

 

느낀 점

간단해 보였는데 테스트케이스를 실행해볼 때마다 틀리길래 "뭐가 문제지..." 하며 몇 번씩 들여다본 문제였습니다.
처음엔 입출력 예시에 홀려 내림차순 정렬 코드를 만들었었습니다.
하지만 정답은 문제 제목 그대로 뒤집어 배열로 만들기였습니다.
아~~주아주아주아~~주 혹시나 저 같은 상황에 처하신 분들은 참고 부탁드립니다 ㅎㅎ

이번 문제에서는 고차 함수인 map함수와 배열을 뒤집는 reversed함수를 사용했습니다.
지금 보니 제 코드는 도통 왜 저렇게 짰는지 모르겠네요 ㅎㅎㅎㅎ
밑에 있는 [다른 사람의 풀이]를 기준으로 설명드리겠습니다.


처음 받아온 Int값 n을 String형으로 형 변환 시켜준 후 map을 사용하여 숫자 하나 하나를 읽어 들여 Int형 배열로 변환시킨 뒤, 뒤집는 코드입니다.
1. Int 값을 String으로 형변환

"\(n)" 또는 String(n)

 

2. map을 사용하여 숫자 하나하나 읽어들여 Int형 배열로 변환

"(\n)".compactMap{ $0.hexDigitValue }

여기서 Map함수가 아닌 compactMap함수를 사용하는 이유는 map으로 리턴되는 Optional 값들이 not nil인지 판단한 뒤 unwrapping 하여 리턴 시켜주기 때문입니다. 만약 map을 사용하고 싶으시다면 아래와 같이 nil 값에 대비한 default 값을 넣어주시면 됩니다.

"\(n)".map { ($0.hexDigitValue ?? 0) }.reversed()

 

3. 배열 뒤집기

"(\n)".compactMap{ $0.hexDigitValue }.reversed()

 

이 문제를 통해서 map과 compactMap의 차이, reversed() 함수 등을 숙지하시면 좋을 것 같습니다 !!
이상으로 프로그래머스의 자연수 뒤집어 배열로 만들기를 마치도록 하겠습니다.
감사합니다:)