[프로그래머스] Lv.2 숫자의 표현 (java)

노리·2023년 5월 19일
0

알고리즘

목록 보기
25/34

2023.04.26 Complete !

🔈 문제 설명

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 이하의 자연수 입니다.

📝 입출력 예

nresult
154

입출력 예 설명

입출력 예 #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

profile
놀이터

0개의 댓글