[ Programmers ] 숫자의 표현 (Java)

ma.caron_g·2021년 12월 7일
0

Lv.2 - Programmers

목록 보기
7/14
post-thumbnail

1. Problem 📃

[ 숫자의 표현 ]

https://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을 표현하는 방법의 수를 return하는 solution를 완성해주세요.


2. Constraint 🔗

[ 제한 사항 ]

  • n은 10,000 이하의 자연수 입니다.

3. Example 📚

[ 입출력 예시 ]

nresult
154

4. Solution 🔑

  1. 입력 받은 수(n)을 자기 자신으로 나타내고, 다음에는 무조건 본인의 절반 숫자들로 나타난다.
    그러므로 절반인 숫자를 넣어줄 변수(num)을 만든다.
    (자기 자신 이전들의 수를 연속으로 덧셈하는 순간 자기 자신을 그냥 넘어버리기 때문에.)

  2. 연속된 수들의 합을 누적시킬 변수(sum)에 절반인 수부터 1씩 감소(--)시켜 나가면서 합을 구한다.

  3. 합의 값(sum)이 주어진 수(n)를 넘어가면 합의 값(sum)을 0으로 다시 초기화 시키고,
    i에 num보다 1 작은 수를 대입하여 감소시킨 수 부터 연속으로 다시 더해나간다.

  4. 합의 값(sum)이 주어진 수(n)와 같은 값을 가지면 정답(answer)의 개수를 증가(++) 시키고, 합의 값 (sum)을 다시 0으로 초기화 한다.
    그 이후 i에 num보다 1 작은 수를 대입하여 다시 작은 수 부터 연속으로 더해 나간다.

5. Code 💻

class Solution {
	public int solution(int n) {
		int answer = 1;
		int num = (n/2) + 1;
		int sum = 0;
		for(int i=num; i>0; i--) {
			sum += i;
			if(sum > n) {
				num--;
				i=num;
				sum = 0;
			}
			else if(sum == n) {
				num--;
				i=num;
				sum = 0;
				answer++;
			}
		}
		return answer;
	}
}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글