이번에 자연수 뒤집기 코드카타를 하며 다시 한 번 난관에 부닥쳤다. 이전에 코드카타를 하면서 몇 번 마주한 string() 함수, map() 함수와 최종적으로 ruturn answer;로 값을 출력하기 위해 사용해야 하는 push()와 unshift(), 그리고 돌고돌아 완성해낸 .forEach 문까지... 차근차근 나의 해답을 풀어보도록 한다.
먼저 문제를 제시하자면, 제목의 자연수 뒤집기는 주어진 임의의 자연수 n을 배열로 만든 것을 뒤집어서 출력하는 것을 뜻한다. 만약 234가 주어졌다면 [4, 3, 2]가 출력되어야 하는 식이다.
이러한 배열로 변환하는 출력을 위하여 answer는 var answer = [];로서 빈 배열로 선언되었고, 이로써 return aswer;로 값을 출력하려면 answer.push나 answer.unshift를 사용해야하게 되었다. 이 두 함수는 배열에 값을 추가하는 함수로, push는 뒤에서부터 배열에 값을 추가하는 것이고 unshift는 앞에서부터 값을 추가하는 것이다. 예를 들어 push는 (2, 3, 4)를 그대로 [..., 2, 3, 4]로 뒤에 붙이고, unshift는 (2, 3, 4)를 [4, 3, 2, ...]로 앞에 붙이게 된다. 이 함수를 사용하기 직전에 출력하는 값이 역순이면 push를, 정순이면 unshift를 사용하여야 '자연수를 뒤집는' 문제의 해답이 될 수 있다.
문제를 푸는 데에 있어서 가장 먼저 해야되는 일은 자연수를 배열로 만드는 것이다. 이는 함수 String(n)을 통해서 쉽게 할 수 있다. 다만 string 함수는 아무 값을 '문자열'로 반환하는 함수이기 때문에 최종적으로 숫자 배열을 반환하기 위해서는 숫자 배열로 변환할 필요가 있다. 이에 필요한 함수가 바로 문자를 숫자로 변환하는 함수를 불러줄 수 있는 arr.map()함수이고 이 방법을 사용하기 위해서 또 필요한 것이 직전에 str으로 만든 문자열을 '배열'로 바꿔줄 수 있는 arr.split('')이다. 이 부분만 잘라오면 이렇다. 만약 n=234이면
let str = String(n); //"234"
let mapfn = (arg) => Number(arg); //문자를 숫자로 변환
let arr = str.split('').map(mapfn); //['2', '3', '4']
이렇게 변환되는 것이다.
이제 자연수를 배열로 만드는 과정이 끝났다. 그리고 이제는 이 배열을 뒤집어야 하는데, 이것에는 arr.forEach문과 unshift 함수를 사용했다. unshift 함수를 사용하는 것은 앞에서 언급한 것과 같이 직전에 만들어진 배열이 정순이기 때문이고, forEach문을 사용하는 것은 배열의 값을 하나씩 불러와 반복하는 반복문이기 때문이다. forEach문을 사용하면 배열 arr의 값 [2, 3, 4]를 차례로 불러와 unshift의 값으로 줄 수 있고, 그럼으로써 역순의 배열이 완성될 수 있다.
arr.forEach((i)=>{ //i = (2)(3)(4)
answer.unshift(i); //[4, 3, 2]
});
코드카타가 점점 어려워지지만, 캠프 초반에 이 문제를 봤으면 결코 답을 이끌어내지 못했을 것을 생각하면 뿌듯한 기분이 든다. 함수는 외우는 것이 아니라지만, 이렇게 문제를 푸는 것을 계속하면 어떤 함수를 사용하는 것이 적절한 지 쉽게 떠올릴 수 있을 것이고, 그것이 나의 자산이 될 것이다.
'배운 코드 정리' 카테고리의 다른 글
indexOf, sort (0) | 2024.07.09 |
---|---|
돌아온 정수 제곱근 판별 (0) | 2024.07.02 |
배열의 평균 값 (0) | 2024.06.21 |
각도기 함수와 짝수 더하기 (0) | 2024.06.20 |
왕초보 1주차 (0) | 2024.06.18 |