우당탕탕 개발일기

[프로그래머스/ 자바스크립트] 자연수 뒤집어 배열로 만들기 본문

What I Learned/Algorithm

[프로그래머스/ 자바스크립트] 자연수 뒤집어 배열로 만들기

rilee 2022. 1. 24. 15:56
728x90

문제의 포인트라고 생각했던 곳은 

  • 자연수를 배열 형태로 return 하는 것 : answer에 push로 넣는걸까?
  • 붙어있는 숫자를 따로 떼어내는 것
  • 그 떼어낸 숫자 사이에 쉼표를 집어넣는 것

이정도로 생각했다. 문제는 이걸 구현하는 방법이 어떤게 있느냐,,🤫

 

우선, 문자열 뒤집기로 검색했을 때 눈에 띄는 정보가 있었다. 바로 str.split('').reverse().join('');

1️⃣ split를 사용해 문자열(str)을 배열로 변환하여, 2️⃣ reverse로 배열로 변환한 것의 순서를 뒤집어주고, 3️⃣ join으로 다시 문자열로 합쳐주는 과정을 의미한다.

이 때, join 뒤에 빈칸으로 두면 문자열로 합쳐질 때 사이에 ','가 자동으로 들어간다고 한다.

이 점까지 내가 지금 풀 문제에 잘 적용할 수 있을 것 같아서 코드를 적어보았다.

 

.

.

 

(엉망 코드!!!!!)

function solution(n) {
	var answer = [];
    var string = n.split('').reverse().join();
    return answer.push(string)
}

 

하지만, 실행되지 않는 코드.. 문제는 바로 냅다 넣었던 'push'와 'split'!

 

push는 제일 많이 의심하던 부분이어서 없애서 수가 나열되도록 만들었지만,

split는 두 군데나 손대야해서 자세히 들여다봐야했다.

 

먼저, split의 매개변수를 주는 것.

나는 split()으로 주었더니 n=12345가 하나하나 떨어지는게 아니라 "12345" 전체로 문자열이 되어버렸다.

split('')으로 따옴표를 넣어 '1', '2', '3', '4', '5' 떨어지게끔 해결 완료!

 

두 번째는, split은 '문자열'을 배열로 변경하는 기능을 한다는 것.

자연스럽게 넣었던 n은 자연수이므로, n을 문자열로 변환해야 split 사용이 가능해진다.

(그렇지 않으면 n.split is not a function이라는 오류 메세지를 보게 된다.)

toString을 이용하여 n을 문자열로 변환하니 해결 완료!

 

의외로 빼도 됐던건 바로 join! 배열로 return 해야하니 굳이 join으로 문자열로 만들 필요가 없었다!

 

 

(💥엉망 코드 2..)

저기까지 해결하고 나니 문제는 배열안의 요소들이 '문자열'로 되어있다는 것.

구글링해보니 원인은 split!

split을 적용하면 잘라진 값들이 '문자열'로 변환되기때문에 이 일이 일어난 것이었고,

이는 split 함수 뒤에 .map(Number)만 붙여주면 문자가 숫자로 변환되어 배열로 들어가게 된다!

.

.

 

💡나의 최종 코드

function solution(n) {
    var answer = n.toString().split('').reverse().map(Number);
    return answer
}

여러번의 수정과정을 걸쳐서 완성된 나의 최종코드..!

수정과정이 참 힘든 문제였다..!

 

 

📍출처 : 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

 

728x90