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 | [5,4,3,2,1] |
기본 제공 틀
function solution(n) {
var answer = [];
return answer;
}
풀이 [JavaScript]
우선 array에 들어온 자연수를 split함수를 사용하여 뜯어낸 후, map함수를 이용하여, array 배열에 있는 각각을 문자열에서 다시 숫자로 변환해주었다.
배열이 짝수라면 각각의 양쪽 끝에 인덱스부터 서로를 바꿔줘야하고, 홀수여도 가장 가운데 인덱스는 바뀌지 않아도 된다는 것을 착안하여, 배열의 길이의 반만큼만 돌면서, 배열의 가장끝에 있는 값을 tmp에 넣어주고, 배열의 가장 끝의 값을 배열의 첫번재 값, 그리고 첫번째 값을 tmp에 넣어두었던 배열의 가장 끝 값을 입력해주었다.
그리고 그 다음 1번째 인덱스의 값은 배열의 가장 끝에서 두번째 값과 바꾸어주도록 로직을 구현해보았다.
function solution(n) {
var array = String(n).split('').map(v => Number(v));
for ( var i=0; i< array.length/2; i++){
var tmp = array[array.length-i-1];
array[array.length-i-1] = array[i];
array[i] = tmp;
}
return array;
}
사실 위와 같은 로직은 더 간단하게 구현하자면, 자바스크립트에서만 쓸 수 있는 [a, b] = [b, a]라는 방식을 사용할 수 있다. 이 문제를 풀 때 이 방법을 적용하지 않아서 스스로 조금 아쉬웠다.
그렇게 짠 코드는 아래와 같다.
function solution(n) {
var array = String(n).split('').map(v => Number(v));
for ( var i=0; i< array.length/2; i++){
[array[i], array[array.length-i-1]] = [array[array.length-i-1], array[i]];
}
return array;
}
그리고 다음 방법은, 가장 뒤의 값에서 부터 i를 거꾸로 줄여나가면서 가장 뒤에 값부터 0번째 인덱스의 값까지를 push해 나가는 방식이다.
function solution(n) {
var array = String(n).split('').map(v => Number(v));
var arrReversed = [];
for (var i = array.length - 1; i >= 0 ; i--) {
arrReversed.push(array[i]);
}
return arrReversed;
}
그리고 궁극적으로 내가 이 문제를 통해서 알아야할 함수로 푼 방식은 아래와 같다.
function solution(n) {
var array = String(n).split('').map(v => Number(v));
return array.reverse();
}
이미 split으로 뜯어져있는 숫자배열을 reverse()함수를 이용하여 거꾸로 뒤집어버리면 아주 간단하게 해결되는 방식이다.
이런 함수가 있다는 것을 알게 된 좋은 문제인 것 같다.
채점 결과 [JavaScript]
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] 문자열을 정수로 바꾸기 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.14 |
---|---|
[프로그래머스 스킬체크 레벨 1] 문자열 내 p와 y의 개수 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.14 |
[프로그래머스 스킬체크 레벨 1] 서울에서 김서방 찾기 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] 자릿수 더하기 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] 정수 내림차순으로 배치하기 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
댓글