본문 바로가기
Algorithm

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

by Baest 2021. 11. 9.

[링크]

https://programmers.co.kr/learn/courses/30/lessons/12932

 

코딩테스트 연습 - 자연수 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345

programmers.co.kr

 

 

[문제설명 및 입출력 예]

 

 

[내가 제출한 코드 및 풀이]

☠오답코드 

- 문제에 대한 이해를 잘못하고 있었음.. (테스트 케이스도 잘못 넣었음)

 

☠테스트 결과

- 당연히 실패..

 

☠오답코드

- 문제를 잘못 이해하고 있어서 타입 때문인가하고 다시 숫자형으로 바꾸려 +도 붙이고 /1 도 했지만 역시나 오답

💯정답코드

 

📝풀이과정

더보기
  1. 숫자를 순서대로 가져올 수 없기 때문에 문자열( toString() )로 형변환하여 담았다.
  2. 현재 상태에서 출력해보면, n이 12345라고 할 때 "12345" 이런식으로 출력된다.
  3. 이제 해당 문자열에서 각 자리 숫자를 뽑아오고 추가로 주어진 조건에 맞게 마지막 자리부터 뽑아서 54321 이런식으로 가져와야한다.
  4. 그러기 위해서 일단 array의 길이(length)만큼 반복문을 돌린다. (처음에 문제 이해를 n=3이면 무조건 [3,2,1] 로 출력되어야하는 것으로 이해했는데, 질문하기 내용을 찾아보니 다른분이 친절하게 n=3이어도 132가 될 수 있고 이 경우 [2,3,1] 로 출력해야되는 것이라고 남겨주셨더라.)
  5. 4번의 반복문은 n의 자리수만큼 돌아갈 것이고, 어떻게 끝자리수 부터 가져와서 출력해줄 것인지를 고민해 본다. 내가 생각한 방법은 "자리수-1-i" 인데 n="12345", n.length = 5이고 i=0일 때  (array[array.length -1 -i]) 를 연산하면 array[4]가 나오고 해당 인덱스의 문자열 5를 꺼낼 수 있다.
  6. 이제 5를 꺼냇으니 answer 배열에 넣어준다. push()를 사용하면 되겠지만, 그 전에 형변환을 하여 숫자로 바꿔줘야한다. 그래서 Number(array[4])의 형태로 바꿔주었다.
  7. 5에서 만든 Number(array[4])를 answer.push(담아주세요) 의 괄호 안에 담으면 answer에 숫자 타입의 5가 담길 것이다.
  8. n의 자리수만큼 for문이 돌아갈 것이므로, [5, 4, 3, 2, 1]의 형태로 담기고 
  9. answer 배열을 return 하면 출력 예시와 동일하게 나올 것이다.

 

 

[다른 사람의 코드]

1
2
3
4
function solution(n) {
    var answer = [];
    return n.toString().split('').reverse().map(o => o = parseInt(o));
}
 
cs
  • map과 reverse 사용된 코드 (아래 코드와 비슷한데 to.String() 부분에서 살짝 차이 있음

 

1
2
3
4
5
function solution(n) { 
    return String(n).split('').reverse().map(v => parseInt(v)); 
}
 
 
 
cs
  • map과 reverse 사용된 코드

 

1
2
3
4
5
6
7
8
9
10
function solution(n) {
    var arr = n.toString().split('');
    var answer = [];
 
    for(var i=arr.length-1; i>=0; i--){
        answer.push(Number(arr[i]));
    }
 
    return answer;
}
 
cs
  • arr의 길이에서 i-- 하면서 값을 넣음 (내가 제출한 코드와 반대이고, 처음에 시도했지만 마무리하지 못했던 코드😂)

 

1
2
3
4
5
6
7
8
9
10
11
12
function solution(n) { 
    var answer = []; 
    n = n.toString(); 
    var len = n.length-1
    
    for(let i=len; i>=0; i--){ 
        answer.push(parseInt(n.charAt(i))); 
    } 
    return answer; 
}
 
 
 
cs
  • n.length-1 을 변수로 만들어서 내 코드보다 가독성 좋은 것 같고, n.charAt 을 사용해 문자 추출 후 parseInt(문자->숫자)로 형변환