문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
n은 10,000,000,000이하인 자연수입니다.
해결 방안 1
function solution(n) {
let answer = []
let str = (""+n);
for(i=0; i<str.length; i++){
answer.unshift(str[i]*1);
}
return answer;
}
1. answer 배열을 선언
2. n을 문자열로 형 변환. 공백문자열과 숫자를 더해, 문자열로 만들었다. toString()을 사용해도 된다!
3. for문은 0부터, n의 자릿수만큼, 1씩 커지며 반복한다.
4. undershift를 통해 앞자리부터 answer배열에 맨 앞에 추가된다.
Troble shooting
코드가 너무 길다고 판단 되었다. 선언부가 여러 번 사용됐다. 분명 더 효율적인 방법이 있을 것이라 판단되었다.
1. map()
map()에 대한 이해도가 떨어져 사용할 생각조차 하지 못했다.
map() 함수는 기존 배열을 순회하며 지정된 콜백함수를 적용하여, 각 요소를 반환하고, 그 변환된 값을 모아서 새로운 배열로 반환한다.
2. parseInt( )
숫자로 형 변환을 할 때 *1밖에 못쓴다... 사실 이게 더 간결한 방법이지만, 해당 메서드를 모르고 *1을 쓰는건 어리석다 생각한다.
parseInt(string, radix);
string의 맨 앞에 숫자가 있다면 숫자형으로 형변환 해준다.
만약 숫자가 아니라 문자가 들어와 있다면 NaN을 반환한다.
radix에는 몇 진법을 쓸지 결정하는 인자를 넣는다. (인자를 넣지 않으면, 10진법으로 처리)
3. reverse()
reverse()는 배열을 역순으로 바꾼다.
unshift()를 사용한 이유는 단순히 reverse()의 존재를 잘 몰랐기 때문이다.
해결 방안 2
function solution(n) {
return (n+"").split("").reverse().map(newArr=> parseInt(newArr))
}
코드가 훨씬 간결해졌다.
1. n을 문자열로 형 변환
2. split() 메서드를 사용하여 배열반환
3. reverse()
Troble shooting
형 변환 없이 해결할 수는 없는 걸까?
해결 방안 3
ㄴfunction solution(n) {
let arr =[];
while(n>0){
arr.push(n%10);
n= Math.floor(n/10)
}
return arr
}
1. 배열 arr을 선언
2. while문, n이 0보다 클 때 참이다.
3. n을 10으로 나눈 나머지를 배열에 넣음
4. n을 10으로 나눈 후 Math.floor() 메서드로 소수점을 내림함.
형변환 없이 푸는 방식이다.
앞으로 숫자의 각 자릿수에 대한 문제를 풀 때 많이 적용 할 수 있을 것 같다.
'[coding Test] > Javascript' 카테고리의 다른 글
코딩 테스트 연습 -java script DAY 5 (고차 배열 메소드, reduce를 배워보자!) (0) | 2024.05.02 |
---|---|
코딩 테스트 연습 -java script DAY 4-2 (0) | 2024.04.22 |
코딩 테스트 연습 -java script DAY 4 정수 부분을 구해보자 Math.trunc() (0) | 2024.04.22 |
코딩 테스트 연습 -java script DAY 3 (삼항연산자를 배워봅시다+할당연산자, 동등연산자, 일치연산자) (0) | 2024.04.19 |
코딩 테스트 연습 -java script DAY 2 (나이 구하기) (getFullYear) (0) | 2024.04.18 |