-
#AIL_23.11.18 // Programmers_자릿수 더하기AIL( Algorithm I Learned) 2023. 11. 18. 23:44
## AIL_자릿수 더하기
***문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
***제한사항
N의 범위 : 100,000,000 이하의 자연수
***입출력 예
N answer 123 6 987 24
***입출력 예 설명
입출력 예 #1// 문제의 예시와 같습니다.
입출력 예 #2 // 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 숫자를 문자열로 변환하고, 각 자릿수를 분해한 후, 각 자릿수를 정수형으로 변환하여 총합을 계산하는 방법입니다.
2. 문제풀이
function solution(n) { let nStr = n.toString().split("").map(Number) let sum = 0; for (let i = 0; i < nStr.length; i++) { sum += nStr[i] } return sum } /* 테스트 1 입력값 〉 123 기댓값 〉 6 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 987 기댓값 〉 24 실행 결과 〉 테스트를 통과하였습니다. */
1. `n`을 `toString()` 메서드를 사용하여 문자열로 변환합니다. 이렇게 하면 각 자릿수에 쉽게 접근할 수 있습니다.
2. 문자열로 변환된 `n`을 `split("")`을 사용하여 각 자릿수를 배열로 분리합니다.
(`n.toString().spl)it("")`)
3. `map(Number)`를 사용하여 각 문자열을 숫자로 변환합니다.
4. 반복문을 사용하여 `nStr`을 순회합니다. 반복문에서는 `parseInt()`함수를 사용하여 각 자릿수를 정수로 변환하고, 이 값을 `sum` 변수에 더해 자릿수의 합을 계산합니다.
4. 마지막으로, 계산된 합인 `sum`을 반환하여 각 자릿수의 합을 구합니다.
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(n) { return String(n) // 주어진 숫자를 문자열로 변환 .split("") // 각 자릿수를 배열로 분리 .reduce((acc, curr) => acc + Number(curr), 0); // 각 자릿수를 순회하며 총합 계산 } /* 테스트 1 입력값 〉 123 기댓값 〉 6 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 987 기댓값 〉 24 실행 결과 〉 테스트를 통과하였습니다. */
1. `String(n)`을 사용하여 입력된 자연수 `n`을 문자열로 변환합니다. 이렇게 하면 각 자릿수에 쉽게 접근할 수 있습니다.
2. `split("")`을 사용하여 문자열을 각 자릿수 별 배열로 분리합니다. 이 때, 각 문자는 배열의 요소로 변환됩니다.
3. `reduce()`를 사용하여 배열의 각 요소를 순회합니다. 초기값 `0`으로 시작하여 배열의 각 요소를 숫자로 변환한 뒤, 이전까지의 누적 값에 더합니다.
** `acc`은 누적값을 나타내며, `curr`은 현재 배열 요소를 나타냅니다.
** 'Number(curr)'을 통해 각 문자열 요소를 숫자로 변환하고, `acc + Number(curr)`를 통해 누적된 값을 갱신합니다.
쉽게 정리하면 위 방법은 문자열 변환 후 배열로 분리하여 각 자릿수를 더하는 것으로 `reduce()` 메서드를 잘 사용한 예시라고 볼 수 있습니다.
# String()과 toString()의 차이점
*** `String()` 함수
** `String()` 함수는 JavaScript의 전역 함수입니다.
** 모든 데이터 타입을 문자열로 변환합니다.
** 어떤 값을 문자열로 바꾸고 싶을 때 사용됩니다.
예시)
let num = 123; let strNum = String(num); // "123" let bool = true; let strBool = String(bool); // "true"
*** `toString()` 메서드
** `toString() `은 JavaScript의 모든 객체가 가지고 있는 메서드입니다.
** 위 메서드는 해당 객체를 나타내는 문자열을 반환합니다.
** 기본데이터 타입(숫자, 문자열, 불리언)을 객체로 변환한 경우에도 `toString()` 메서드를 사용할 수 있습니다.
예시)
let num = 123; let strNum = num.toString(); // "123" let arr = [1, 2, 3]; let strArr = arr.toString(); // "1,2,3"
=>>> ***간단 정리
`String()` 함수는 어떤 값이든 문자열로 변환하고 싶을 때 사용하며, `toString()` 메서드는 객체에서 해당 객체를 나타내는 문자열을 얻고자 할 때 사용합니다. 대부분의 경우, 숫자, 문자열 또는 불리언 값에 `toString()` 메서드를 직접 사용하지 않고, `String()` 함수를 사용하는 것이 더 편리하고 명확합니다.
# reduce() 메서드란?
`reduce()`메서드는 배열의 각 요소를 이용하여 하나의 결과값을 도출하는데 사용됩니다. 이 메서드는 네 가지의 매개변수를 받아 동작합니다.
*** 콜백함수
`reduce()`메서드의 가장 중요한 매개변수로, 배열 요소마다 호출되는 함수입니다. 이 함수는 4가지 매개변수를 받습니다.
1. `accumulator`(누적기)
누적된 결과를 저장하는 변수로, 콜백 함수의 반환값이 여기에 누적됩니다.
2. `currentValue`(현재 값)
배열에서 처리 중인 현재 요소의 인덱스입니다.
3. `currentIndex`(현재 인덱스,선택적)
현재 처리중인 요소의 인덱스입니다.
4. `array`(배열, 선택적)
`reduce()`를 호출한 배열 자체입니다.
*** 초기값(Initial Value, 선택적)
초기값을 제공하는 매개변수입니다. 초기값을 지정하지 않으면 배열의 첫 번째 요소가 사용됩니다. 배열이 비어있는 경우 초기값이 없으면 오류를 발생시킵니다.
*** `reduce()` 메서드의 동작
1. `reduce()`는 배열의 첫 번째 요소부터 마지막 요소까지 순차적으로 순회합니다.
2. 콜백 함수가 각 요소에 대해 호출되며, 첫 번째 호출시에는 초기값 또는 배열의 첫 번째 요소가 `accumulator`에 할당됩니다.
3. 콜백 함수가 반환하는 값은 다음 순회에 사용될 `accumulator`가 됩니다.
4. 모든 요소를 순회한 후, `reduce()`는 최종적으로 누적된 결과를 반환합니다.
예시)
let numbers = [1, 2, 3, 4, 5]; let sum = numbers.reduce((accumulator, currentValue) => { return accumulator + currentValue; }, 0); console.log(sum); // 출력 결과: 15 (1 + 2 + 3 + 4 + 5)
위 코드에서 `reduce()` 메서드는 초기값을 0으로 설정하고 배열의 모든 요소를 더하여 총합을 계산합니다. 이때 각 요소는 콜백 함수에 의해 누적되고, 최종적으로 총합 15를 반환합니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.21 // Programmers_핸드폰 번호 가리기 (1) 2023.11.21 #AIL_23.11.20 // Programmers_x만큼 간격이 있는 n개의 숫자 (2) 2023.11.20 #AIL_23.11.17 // Programmers_나머지가 1이 되는 수 찾기 (0) 2023.11.17 #AIL_23.11.16 // Programmers_약수의 합 (0) 2023.11.16 #AIL_23.11.15 // Programmers_서울에서 김서방 찾기 (0) 2023.11.15