-
#AIL_23.11.10 // Programmers_자연수 뒤집어 배열로 만들기AIL( Algorithm I Learned) 2023. 11. 10. 19:26
## AIL_자연수 뒤집어 배열로 만들기
***문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
***제한 조건
n은 10,000,000,000이하인 자연수입니다.
***입출력 예
n return 12345 [5,4,3,2,1]
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 자연수 n을 뒤집어서 각 자리 숫자를 원소로 갖는 배열을 리턴하는 것입니다.
1) 자연수 n을 문자열로 변환하여 각 자리 숫자를 문자로 분리합니다.
2) 분리된 문자를 다시 숫자로 변환합니다.
3) 변환된 숫자 배열을 뒤집습니다.
반복문을 사용하여 자리수를 뒤집는 방법도 있지만 간결한 풀이를 위해 위에 방식을 사용하겠습니다.
2. 문제풀이
function solution(n) { return String(n).split("").map((num) => Number(num)).reverse(); }; /* 테스트 1 입력값 〉 12345 기댓값 〉 [5, 4, 3, 2, 1] 실행 결과 〉 테스트를 통과하였습니다. */
1) `String(n)`
주어진 자연수 `n`을 문자열로 변환합니다. 이는 각 자리 숫자를 문자로 분리하기 위한 첫 단계입니다.
2) `.split("")`
문자열을 각각의 문자로 분리합니다. 이 때, 빈 문자열을 기준으로 분리하면 각 자리 숫자가 배열의 원소로 들어갑니다.
3) `.map((num) => Number(num))`
각 문자를 다시 숫자로 변환합니다. 이를 통해 숫자로 이루어진 배열을 얻습니다.
4) `reverse()`
얻어진 숫자 배열을 뒤집습니다. 이렇게 하면 주어진 자연수의 각 자리 숫자를 거꾸로 된 순서로 얻을 수 있습니다.
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(n) { // 문자풀이 // return (n+"").split("").reverse().map(v => parseInt(v)); // 숫자풀이 var arr = []; do { arr.push(n%10); n = Math.floor(n/10); } while (n>0); return arr; } /* 테스트 1 입력값 〉 12345 기댓값 〉 [5, 4, 3, 2, 1] 실행 결과 〉 테스트를 통과하였습니다. */
주어진 함수 풀이는 자연수 `n`을 뒤집어서 각 자리 숫자를 배열로 반환하는 두 가지 방법을 보여줍니다.
***문자열 풀이
return (n+"").split("").reverse().map(v => parseInt(v));
1. `(n+"")`
자연수 `n`을 문자열로 변환합니다.
2. `.split("")`
문자열을 각각의 문자로 분리합니다. 이를 통해 각 자리 숫자가 배열의 원소로 들어갑니다.
3. `.revers()`
배열을 뒤집습니다.
4. `.map(v => parseInt(v))`
각 문자를 숫자로 변환합니다. `parseInt`를 사용하여 문자열을 숫자로 변환하고, 뒤집은 배열을 얻습니다.
*** 숫자 풀이
var arr = []; do { arr.push(n % 10); n = Math.floor(n / 10); } while (n > 0); return arr;
1. `var arr = []`
빈 배열을 생성합니다. 이 배열에 자리수를 뒤집어서 담을 것입니다.
2. `do { ... } while (n > 0)`: `do-while`루프를 사용하여 다음을 반복합니다.
// `arr.push(n%10)`
자연수 `n`을 10으로 나눈 나머지(마지막 자리 숫자)를 배열에 추가합니다.
// `n = Math.foor(n / 10)`
자연수 `n`을 10으로 나눈 몫을 새로운 `n`으로 갱신합니다.
3. 반환
뒤집어진 배열을 반환합니다.
# `do-while`에 대하여
`do-while`문은 조건을 먼저 검사하지 않고 루프 몸체를 최소 한 번 실행하는 반복문입니다. `do` 키워드 다음에 중괄호 `{ ... }` 로 감싸진 몸체가 위치하고, 그 뒤에 `while` 키워드와 조건이 따라옵니다. 루프 몸체가 한 번 실행된 후에 조건을 검사하고, 조건이 `true`인 동안 계속해서 반복됩니다.
`do-while`의 기본 구조는 다음과 같습니다.
do { // 실행할 코드 블록 } while (조건);
예를 들어, 아래의 코드는 1부터 5까지의 숫자를 출력하는 `do-while` 루프를 나타냅니다.
var i = 1; do { console.log(i); i++; } while (i <= 5);
이 루프는 처음에 `i`가 1이기 때문에 일단 루프 몸체가 실행되고, 그 후에 `i`가 5까지 증가하면서 조건을 만족하지 않을 때까지 계속 반복됩니다. 따라서 결과는 다음과 같습니다.
1 2 3 4 5
`do-while` 문은 조건을 먼저 검사하지 않고 최소한 한 번은 루프 몸체를 실행해야 하는 상황에서 유용합니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.14 // Programmers_정수 내림차순으로 배치하기 (1) 2023.11.14 #AIL_23.11.13 // Programmers_문자열 정수로 바꾸기 (1) 2023.11.13 #AIL_23.11.09 // Programmers_중앙값 구하기 (3) 2023.11.09 #AIL_23.11.07 // Programmers_문자 반복 출력하기 (0) 2023.11.07 #AIL_23.11.03 // Programmers_양꼬치 (1) 2023.11.03