[JAVA/프로그래머스] 연습문제: 숫자의 표현

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/1845

👊 도전

1. 설계

  1. DP를 이용한다.
  2. 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. 설명

  1. 이중 for문을 이용한다
    • i는 시작점, j는 i+1부터 연속수이다.
    • i는 n까지 갈 필요가 없다. n/2 초과 시 연속수의 합은 무조건 n을 넘는다.
    • sum에 j까지 더하고, n과 같으면 answer++후 break
    • sum>n이면 더이상 볼 필요 없으므로 break
    • 마지막에 n 나 자신도 포함할 수 있으므로 answer+1을 리턴한다.

👏 해결 완료!