문제 설명
자연수 N
이 주어졌을 때, N
의 각 자릿수의 합을 구하는 문제입니다. 예를 들어 N = 123
이라면, 1 + 2 + 3 = 6을 반환해야 합니다.
제한 사항
N
의 범위는 100,000,000 이하의 자연수입니다.
입출력 예
N | answer |
---|---|
123 | 6 |
987 | 24 |
문제 풀이
이 문제는 주어진 자연수 N
의 각 자릿수를 구해서 더하는 작업이 필요합니다. 이를 해결하는 방법은 두 가지로 나눌 수 있습니다:
- 수학적 접근: 숫자를 10으로 나눈 나머지를 구해 각 자릿수를 추출한 뒤, 이를 반복해서 더하는 방식.
- 문자열 접근: 숫자를 문자열로 변환한 뒤 각 자릿수를 순회하며 더하는 방식.
1. Java 코드 풀이
class Solution {
public int solution(int n) {
int sum = 0;
while (n != 0) {
sum += n % 10; // n의 마지막 자릿수를 더함
n /= 10; // n을 10으로 나누어 자릿수를 줄임
}
return sum;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.solution(123)); // 출력: 6
System.out.println(sol.solution(987)); // 출력: 24
}
}
코드 설명
n % 10
연산을 통해n
의 마지막 자릿수를 추출하여sum
에 더합니다.n /= 10
을 통해n
을 10으로 나누어 자릿수를 하나씩 줄여 나갑니다.n
이 0이 될 때까지 이 과정을 반복하여 모든 자릿수를 더합니다.
2. Python 코드 풀이
def solution(n):
return sum(int(digit) for digit in str(n))
# 테스트 예시
print(solution(123)) # 출력: 6
print(solution(987)) # 출력: 24
코드 설명
- 숫자
n
을 문자열로 변환한 후, 각 자릿수를 순회하며int
로 변환하여 더합니다. sum()
함수와 리스트 컴프리헨션을 이용해 간결하게 구현할 수 있습니다.
3. 시간 복잡도 분석
두 코드 모두 주어진 숫자의 자릿수만큼의 연산을 수행합니다.
- 숫자의 자릿수가
d
라고 했을 때, 각 자릿수를 추출하여 더하는 과정은 O(d)의 시간 복잡도를 가집니다. - 따라서 주어진 숫자가 최대 100,000,000일 때, 시간 복잡도는 O(d), 즉 O(log N)가 됩니다. 이는
N
의 자릿수에 비례하는 복잡도입니다.
4. 공간 복잡도 분석
- Java와 Python 모두
sum
변수 하나만을 사용하거나, 리스트 컴프리헨션을 통해 자릿수를 순회할 때마다 상수 크기의 메모리만 필요로 하므로, 공간 복잡도는 O(1)입니다.
5. 다른 자바 코드 풀이 방법
방법 1: 문자열을 활용한 풀이
class Solution {
public int solution(int n) {
String numStr = Integer.toString(n);
int sum = 0;
for (char c : numStr.toCharArray()) {
sum += c - '0'; // 각 문자를 숫자로 변환해 더함
}
return sum;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.solution(123)); // 출력: 6
System.out.println(sol.solution(987)); // 출력: 24
}
}
이 방법은 숫자를 문자열로 변환한 후, 각 문자를 순회하면서 숫자로 변환해 더하는 방식입니다.
결론
이 문제는 자릿수를 추출하여 더하는 기본적인 문제로, 수학적인 방법이나 문자열 변환을 통해 쉽게 해결할 수 있습니다. 시간 복잡도는 O(log N)이며, 메모리 사용량도 매우 적어 효율적으로 처리할 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 문자열 내 p와 y의 개수 (1) | 2024.10.14 |
---|---|
[프로그래머스] 약수의 합 (0) | 2024.10.13 |
[프로그래머스] 짝수와 홀수 (0) | 2024.10.13 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2024.10.13 |
[프로그래머스] 평균 구하기 (0) | 2024.10.13 |