👀 문제
https://programmers.co.kr/learn/courses/30/lessons/1845
👊 도전
1. 설계
- DP를 이용한다.
- dp[i][j]=max(dp[i-1][j] 빼고 나머지 dp[i-1][])+land[i][j]
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
/**
*
* @author HEESOO
*
*/
class Solution {
public int solution(int n) {
int answer = 0;
int half=n/2; // n의 반 이상부터 연속합은 무조건 n을 넘음
for(int i=1;i<=half;i++){
int sum=i;
for(int j=i+1;j<=n;j++){ // 연속수 j
sum+=j;
if(sum==n) { // n과 같으면 ++
answer++;
break;
}
else if(sum>n) break; // n 넘으면 break
}
}
return answer+1; // 마지막 나 자신 n 추가
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 이중 for문을 이용한다
- i는 시작점, j는 i+1부터 연속수이다.
- i는 n까지 갈 필요가 없다. n/2 초과 시 연속수의 합은 무조건 n을 넘는다.
- sum에 j까지 더하고, n과 같으면 answer++후 break
- sum>n이면 더이상 볼 필요 없으므로 break
- 마지막에 n 나 자신도 포함할 수 있으므로 answer+1을 리턴한다.