문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12924
문제 설명
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한사항
- n은 10,000 이하의 자연수 입니다.
입출력 예
n | result |
15 | 4 |
코드 구현
class Solution {
public int solution(int n) {
int count = 0;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
for (int j = i + 1; j <= n; j++) {
if (sum > n || sum == n) {
break;
}
sum += j;
}
if (sum == n) {
count++;
}
sum = 0;
}
return count;
}
}
코드 구현 최적화
class Solution {
public int solution(int n) {
int count = 0;
for (int i = 1; i <= n; i += 2) {
if (n % i == 0) {
count++;
}
}
return count;
}
}
풀이
첫 번째 풀이의 경우에는 2중 for문을 활용하여 sum의 값을 n의 값이 똑같거나 커질 때까지 증가시켰습니다.
그 후에 for문을 빠져나와서 n과 값이 같은 경우 count를 증가시켜주고 sum의 값을 0으로 초기화시켜주면서 조건의 값을 확인했습니다.
두 번째 풀이의 경우에는 수학의 공식을 활용하여 작성한 내용입니다.
주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수는
주어진 수의 홀수인 약수의 개수와 같다는 정수론의 정리가 있습니다.
주어진 값을 예시로 만들어보겠습니다.
n = 15인 경우, 약수는 1, 3, 5, 15 가 있습니다.
1. 약수가 1인 경우
- 1로 인해서 15는 연속하는 하나의 자연수, 15로 이루어져있음을 알 수 있습니다.
2. 약수가 3인 경우
- 3으로 인해 15는 5 + 5 + 5의 합으로 표현되는 것을 알 수 있고 약간의 조작을 통해, 4 + 5 + 6을 만들어 연속하는 자연수가 될 수 있습니다.
3. 약수가 5인 경우
- 5를 활용하면 3 + 3 + 3 + 3 + 3 즉, 1 + 2 + 3 + 4 + 5 로 표현이 가능합니다.
4. 약수가 15인 경우
- 모든 홀수는 2n + 1는 n과 n + 1, 연속하는 두 수의 합으로 표현할 수 있기에 7 + 8로 표현이 가능합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Java :: 추억 점수 (1) | 2024.04.04 |
---|---|
[프로그래머스] Java :: 달리기 경주 (1) | 2024.04.03 |
[프로그래머스] Java :: 최빈값 구하기 (0) | 2024.03.31 |
댓글