아요 개발 일기

[프로그래머스] Level 1. 자연수 뒤집어 배열로 만들기 본문

Algorithms/문제 풀이

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

소진이 2023. 1. 16. 10:38

안녕하세여 :D

요즘 날씨가 많이 풀린 것 같아요! ㅎㅎㅎㅎ 

오늘은 자연수 뒤집어 배열로 만들기 문제를 풀어보겠습니다!

 


문제

내가 푼 풀이

일단 reversed()에 대해 설명해드리자면 배열을 뒤집어서 반환해주는 함수입니다!

그래서 Int64 데이터 형식에서는 reversed() 함수를 사용할 수 없어요ㅜ.ㅜ

하지만 방법이 없는 것이 아닙니다! String으로 타입을 변경해주면 사용이 가능해요!! String(n) 부분!

 

저희는 값을 잘라서 출력을 해줘야하죠?

그럴때는 for-in문을 사용할 수도 있습니다!

이렇게용!

그치만 고차함수 map이 유사한 역할을 하기때문에 저는 고차함수 map을 사용하였어요!

map 함수를 사용하여 reversed()된 String(n) 값을 Int로 변환해 주었습니다. 

 


괜찮다고 생각한 풀이

 

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

와 저번에 배웠던 compactMap도 보이고 새로운 hexDigitValue도 보이네요...?

hexDigitValue는 16진수를 Int 값으로 변환해주는 친구입니다!! 

문제 풀면서 데이터 형식이 Int64여서 좀 애먹었는데 이렇게 좋은 친구가 있었다니..........

compactMap은 저번에 같이 다뤄봤죠??? 고차함수 map이랑 비슷한 친구인데 nill 값을 없애고 출력해주는! 깔끔하게 출력해주는 함수!

 

즉, " \(n) " String n 값을 16진수에서 Int 값으로 변환하여 compactMap으로 배열을 만들어주고 reversed()로 거꾸로 뒤집어서 반환해주는 코드입니다!

 

 

var num: Int = Int(n)
var arr: [Int] = []

	while num > 0 {
    	arr.append(num % 10)
        num /= 10
    }
    
return arr

이 코드는 제가 생각해보지 못한 방법을 사용한 것 같아서 데리고 왔어요!

num 변수는 Int로 형변환한 n 값을 받아오고..

While num이 0보다 클때...

arr 배열에 추가(append)합니다. num을 10으로 나눈 값을

그 후, num을 10으로 나눈 나머지 값을 num 변수에 저장해줬어요!

뭔가 특이해......  

 

이해 안 가신 분들을 위해 설명하자면!!

12345(n값) % 10을 하면 몫 1234 나머지 5가 나옵니다! 그래서 5가 append 되고, 그 다음 % 10은 4 ... 규칙으로 arr에 추가가됩니다! 

num /= 10을 하는 이유는 위에서 맨 뒤 숫자가 append 되었으니, 그 부분을 빼야하기때문이에요!!

num = 1234로 변경 그 다음은 123 ...의 규칙!

이해 가시나요?!! 재밌네용 ㅎㅎㅎ

 

정확성 비교

내가 푼 풀이

괜찮다고 생각한 풀이 1 (campactMap과 hexDigitValue)

 

괜찮다고 생각한 풀이 2 (%와 / )

 

제 풀이가 가장 느리구 괜찮다고 생각한 풀이 1,2가 비슷하네요?!!

역시 짧다고 다 좋은 코드는 아닌 것 같아요..!!!ㅎㅎㅎ,, 

오늘은 재미있는 코드도 봐서 더 흥미로운 시간이었던 것 같습니다!

어떤 분이 이거 5분만에 풀었다고 하시는데 저는 아직 15분 정도는 걸리더라고요.....ㅎㅎ 아직 멀어따!!

 

혹시 틀린 설명이나 더 좋은 풀이있다면 댓글로 알려주세요!!

감사합니당 @.@~~