코딩테스트/프로그래머스

[프로그래머스] Java :: 숫자의 표현

블로그 주인장 2024. 6. 14.

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12924

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명

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

 

입출력 예

n result
15 4

 

 

코드 구현

class Solution {
    public int solution(int n) {
        int count = 0;

        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
            for (int j = i + 1; j <= n; j++) {
                if (sum > n || sum == n) {
                    break;
                }

                sum += j;
            }

            if (sum == n) {
                count++;
            }

            sum = 0;
        }

        return count;
    }
}

 

 

코드 구현 최적화

class Solution {
    public int solution(int n) {
        int count = 0;

        for (int i = 1; i <= n; i += 2) {
            if (n % i == 0) {
                count++;
            }
        }

        return count;
    }
}

풀이

첫 번째 풀이의 경우에는 2중 for문을 활용하여 sum의 값을 n의 값이 똑같거나 커질 때까지 증가시켰습니다.

그 후에 for문을 빠져나와서 n과 값이 같은 경우 count를 증가시켜주고 sum의 값을 0으로 초기화시켜주면서 조건의 값을 확인했습니다.

 

두 번째 풀이의 경우에는 수학의 공식을 활용하여 작성한 내용입니다.

 

주어진 자연수를 연속된 자연수의 합으로 표현하는 방법의 수는 

주어진 수의 홀수인 약수의 개수와 같다정수론의 정리가 있습니다.

 

주어진 값을 예시로 만들어보겠습니다.

 

n = 15인 경우, 약수는 1, 3, 5, 15 가 있습니다.

 

1. 약수가 1인 경우

- 1로 인해서 15는 연속하는 하나의 자연수, 15로 이루어져있음을 알 수 있습니다.

2. 약수가 3인 경우

- 3으로 인해 15는 5 + 5 + 5의 합으로 표현되는 것을 알 수 있고 약간의 조작을 통해, 4 + 5 + 6을 만들어 연속하는 자연수가 될 수 있습니다.

3. 약수가 5인 경우

- 5를 활용하면 3 + 3 + 3 + 3 + 3 즉, 1 + 2 + 3 + 4 + 5 로 표현이 가능합니다.

4. 약수가 15인 경우

- 모든 홀수는 2n + 1는 n과 n + 1, 연속하는 두 수의 합으로 표현할 수 있기에 7 + 8로 표현이 가능합니다.

 

 

반응형

댓글