본 글에서는 자바스크립트 코딩 테스트에서 자주 출제되는 알고리즘 문제 중 하나인 “숫자의 합 구하기” 문제를 다루겠습니다. 이 문제를 통해 기본적인 알고리즘 구성 능력과 자바스크립트의 데이터 처리 방법에 대해 배워 보도록 하겠습니다.
문제 설명
주어진 숫자 문자열이 있을 때, 문자열에 포함된 숫자들의 합을 구하는 함수를 작성하시오.
예를 들어, 입력 문자열이 “12345”이라면, 1 + 2 + 3 + 4 + 5 = 15를 반환해야 합니다.
입력
- 길이가 n인 숫자 문자열이 1개 주어집니다 (1 ≤ n ≤ 106)
출력
- 숫자 문자열에 포함된 모든 숫자의 합을 정수로 반환합니다.
문제 접근 방법
이 문제를 해결하기 위해, 기본적으로 다음과 같은 과정을 거치게 됩니다:
- 숫자 문자열을 순회하여 각 문자를 숫자로 변환합니다.
- 변환된 숫자를 누적 합산합니다.
- 최종 합계를 반환합니다.
코드 구현
자바스크립트에서 이 문제를 해결하는 코드 구현은 다음과 같이 진행할 수 있습니다.
function sumOfDigits(numString) {
// 기본 변수 초기화
let total = 0;
// 문자 순회
for(let i = 0; i < numString.length; i++) {
// 각 문자를 숫자로 변환 후 누적 합
total += parseInt(numString[i]);
}
// 최종 합 반환
return total;
}
// 함수 테스트
const inputString = "12345";
const result = sumOfDigits(inputString);
console.log("입력 문자열:", inputString);
console.log("숫자 합:", result); // 출력: 15
코드 설명
위 코드는 sumOfDigits
라는 함수를 정의하고 있습니다. 이 함수는 입력으로 숫자 문자열을 받아 각 문자를 순회하며 정수로 변환한 후, 총합을 계산합니다.
let total = 0;
: 문자열에서 합계를 저장할 변수를 초기화합니다.for(let i = 0; i < numString.length; i++) { ... }
: 입력 문자열의 길이만큼 반복문을 사용하여 각 문자를 순회합니다.total += parseInt(numString[i]);
:parseInt
를 사용하여 문자열의 각 문자를 정수로 변환하고, 이를 누적하여 합계를 계산합니다.return total;
: 누적 합계를 반환합니다.
시간복잡도 분석
이 알고리즘의 시간 복잡도는 O(n)입니다. n은 입력 문자열의 길이를 의미합니다. 문자열을 한 번만 순회하므로, 시간 복잡도는 선형 시간입니다.
공간복잡도 분석
공간 복잡도는 O(1)입니다. 입력 문자열 외에는 추가적으로 변수 하나만을 사용하기 때문입니다.
변형 문제
위의 문제가 기본 형태라면, 변형된 문제로는 “음수와 양수를 포함한 숫자들로 이루어진 배열에서 양수의 합을 구하라”라는 문제가 있을 수 있습니다.
이러한 문제는 기본 알고리즘을 변경하거나 추가 조건을 고려해야 하므로, 코드를 약간 수정해야 합니다.
영지식형 문제 변형 코드 예시
// 변형 문제: 짝수 인덱스의 숫자 합 구하기
function sumEvenIndexedDigits(numString) {
let total = 0;
// 짝수 인덱스에 해당하는 숫자만 합산
for(let i = 0; i < numString.length; i += 2) {
total += parseInt(numString[i]);
}
return total;
}
// 코드 테스트
const inputString = "123456"; // 예: 1과 3과 5를 더함
console.log("짝수 인덱스 합:", sumEvenIndexedDigits(inputString)); // 출력: 12
결론
“숫자의 합 구하기” 문제는 자바스크립트의 기본적인 문법과 알고리즘을 익히는 데 매우 유용합니다.
이 문제를 통해 문자열 처리, 반복문, 조건문 등의 기초적인 개념을 학습할 수 있습니다.
다양한 변형 문제를 시도해보면서 알고리즘 이해를 더욱 깊이 있게 해보시기 바랍니다.
다음 시간에는 더 복잡한 문제를 다루어 보도록 하겠습니다. 이 강좌를 통해 여러분이 자바스크립트 코딩 테스트에서 사용할 수 있는 다양한 기술을 학습하고, 효과적으로 문제를 해결하는 데 도움이 되길 바랍니다.