Small Grey Outline Pointer 프로그래머스 [JavaScript] Lv.1 :: 자연수 뒤집어 배열로 만들기
본문 바로가기
Dev./Algorithm Prac

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

by sso. 2022. 11. 22.
문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

 

 

 

나의 풀이 (오답)
function solution(n) {
    var answer = [];
    var m=String(n); #문자열로 변환하기
    for(let i=m.length; i>=0; i--){
        answer.push(m[i]);
    }
    return answer;
}

맨 처음에 이렇게 풀었는데 코드 실행하니까 에러 떠서 다시 생각해봤다

 

숫자를 하나씩 쪼개야 하기 때문에 문자열로 변환하고

배열의 마지막 인덱스 부터 인덱스[0] 까지 순서대로 담으면 되는 것 까지는 알겠다

 

여기까지는 문자열로 변환 된 '1' '2' 이런 상태 그대로 배열에 담기기 때문에

출력 해봤자 [5,4,3,2,1] 이런 형태로 나오지 않는 것이었음

아니면 처음 부터 아예 잘못된 걸 수도...

 

 

나의 풀이 (수정)
function solution(n) {
    let answer = [];
    let m=String(n).split('').reverse()
    for(let i=0; i<m.length; i++){
        answer.push(parseInt(m[i]))
    }
    return answer;
}

split 과 reverse를 추가하고

for문으로 m 길이 만큼 반복해서 answer에 순서대로 값을 넣어준다

 

 

 

다른 사람의 풀이
function solution(n) {
    return String(n).split('').reverse().map(num => num = parseInt(num));
}

 

1. toString() 으로 문자열로 변환

2. 변환된 문자열을 split 함수를 통해 ' ' 스페이스 공백 단위로 끊어줌

3. 2번을 뒤집어 주기 위해 reverse() 사용

4. map() 함수로 새로운 배열에 담아주며, 그 때 parseInt를 사용해 숫자로 다시 바꿔서 담는다

 

 

function solution(n) {
  var arr = [];
  do {
    arr.push(n % 10);
    n = Math.floor(n / 10);
  } while (n > 0);
  return arr;
}

연산 속도는 숫자가 더 빠르기 때문에 속도를 빨리 하고 싶으면 이렇게 풀어도 되는 듯

 

 

 

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;
}

reverse를 사용하지 않고 바로 for문에서 배열 순서 반대로 반복해도 될 듯

Number() : 문자열을 숫자로 변환 하는 함수

 

내가 맨 처음 접근했던 방식이랑 가장 유사한데 

이 코드를 보고 내가 어디서 잘못된 건 지 알았다

 

-배열의 마지막 인덱스부터 반복을 시작하려면

인덱스의 length에서 -1 을 해줘야 마지막 요소값이 되는건데 -1을 안해줬다

-문자열을 숫자로 바꾸는 것을 생략하고 push 했음

 

 

배운 점 & 리마인드

parseInt 함수를 통해 문자열을 다시 int형 정수로 변환 함을 알게 됨

->자바 공부할 때 많이 봤던 건데 자주 안써서 기억이 잘 안났음

 

spilt 함수 : 문자열을 일정한 구분으로 잘라 배열에 저장 

 

728x90

댓글