아요 개발 일기
[프로그래머스] Level 1. 자연수 뒤집어 배열로 만들기 본문
안녕하세여 :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분 정도는 걸리더라고요.....ㅎㅎ 아직 멀어따!!
혹시 틀린 설명이나 더 좋은 풀이있다면 댓글로 알려주세요!!
감사합니당 @.@~~
'Algorithms > 문제 풀이' 카테고리의 다른 글
[프로그래머스] Level 1. 서울에서 김서방 찾기 (2) | 2023.01.16 |
---|---|
[프로그래머스] Level 1. 정수 내림차순으로 배치하기 (1) | 2023.01.16 |
[프로그래머스] Level 1. 문자열 다루기 기본 (0) | 2023.01.16 |
[프로그래머스]Level 1. 두 정수 사이의 합 (0) | 2023.01.16 |
[프로그래머스] Level 1. 나머지가 1이 되는 수 찾기 (0) | 2023.01.16 |