문제 설명
자연수 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 함수 : 문자열을 일정한 구분으로 잘라 배열에 저장
'Dev. > Algorithm Prac' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 [세균증식] - js (0) | 2023.02.20 |
---|---|
프로그래머스 [JavaScript] Lv.0 :: 종이자르기 (0) | 2022.11.30 |
프로그래머스 [JavaScript] Lv.1 :: 평균 구하기 (1) | 2022.11.22 |
Python :: 함수 예제 (0) | 2022.07.19 |
python :: dictionary 기초예제/ 학생관리 프로그램 (0) | 2022.07.14 |
댓글