2023.04.26 Complete !
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
n | result |
---|---|
15 | 4 |
입출력 예 #1
문제의 예시와 같습니다.
class Solution {
public int solution(int n) {
int answer = 0;
int sum = 0, i=1;
while(i <= n) {
for(int j=i; j<=n; j++) {
sum+=j;
if(sum == n) {
i++;
answer++;
sum = 0;
break;
}else if(sum > n) break;
}
i++;
sum = 0;
}
return answer;
}
}
😥 else if에 sum>n
에 break문을 안넣었더니 답은 맞는데 효율성에서 다 초과가 나왔었다. sum == n을 하면 sum 이 n보다 큰거는 돌지 않는다고 생각을 했는데 그거 때문인지 효율성 에러라서 sum > n 조건을 넣고 break를 걸어주었다. 그랬더니 효율성 성공이 떴다.
class Solution {
public int solution(int n) {
int answer = 1;
for (int k = 1; k <= n / 2; k++) {
int sum = 0;
int i = k;
while (sum < n) {
sum += i++;
}
// System.out.println(sum);
if (sum == n)
answer++;
}
return answer;
}
}
나는 for문 전체를 다 돌렸지만, 이 분은 for문 n/2만큼 반복
💡 예시에서 7 + 8 = 15처럼, 15 절반의 수인 7은 8과 더했을 때 15를 얻을 수 있지만, 8 이상의 수의 연속된 숫자는 15의 수를 넘기에 n/2만큼만 반복했다.
📌 참고한 블로그
https://developerm.tistory.com/m/186