문제
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이 일련의 자연수로 표현될 수 있는 방법의 수를 반환하는 해를 완성하십시오.
제한
- n은 10,000 이하의 자연수이다.
해결
- 1부터 시작하여 n까지 연속된 숫자를 더합니다(덧셈 결과가 n보다 크면 false).
- 참이면 응답 증가
- 시작 숫자를 1씩 증가
- 시작 번호가 n/2가 될 때까지 위의 과정을 반복합니다.
public class Solution {
public static int solution(int n) {
int answer = 1;
boolean check = true;
for (int startNum = 1; startNum <= n / 2; startNum++) {
int sum = 0;
int j = startNum;
while (true) {
// startNum부터 연속하며 더한다
sum += j;
j++;
if (sum == n) { // n을 만들 수 있다면 true
check = true;
break;
} else if (sum > n) { // n을 만들 수 없다면 false
check = false;
break;
}
}
if (check == true) { // n을 만들 수 있다면 answer++
answer++;
}
}
return answer;
}
}
아~ 이런 구조라면 당연히 효율이 떨어지겠죠? 했는데 한방에 합격했네요 ㅎㅎ