코딩 테스트(Coding Test)/프로그래머스

[프로그래머스] 숫자의 표현 - 자바(Java)

잇트루 2023. 8. 16. 01:30
반응형

문제 링크

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

 

 

입출력 예 설명

입출력 예 #1

문제의 예시와 같습니다.

 

 

코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for (int i = 1; i <= n; i++) {
            int sum = 0;
            
            // 현재 i부터 n까지 자연수를 더해가면서 합을 계산
            for (int j = i; j <= n; j++) {
                sum += j;
                
                // 현재 i부터 n까지 자연수를 더해가면서 합을 계산
                if (sum == n) {
                    answer++;
                    break;
                }
                
                // 합이 주어진 n보다 크면 내부 반복문 종료
                if (sum > n) break;
            }
        }
        
        return answer;
    }
}

코드 설명

주석 참고

  • 이 문제는 정수 n을 연속된 자연수들의 합으로 나타낼 수 있는 방법의 수를 구하는 문제다.
  • 첫 번째 for 문을 통해 i부터 n까지 1씩 증가시키면서 반복한다. 반복문 내에서 연속된 자연수의 합을 저장하기 위한 변수 sum을 초기화한다.
  • 중첩 for 문에서 현재 i를 시작(j = i)으로 n까지 1씩 증가시키면서 sum에 더한다.
  • sum이 n과 같으면 answer를 1 증가시키고 중첩 for 문을 종료하여 다음 i부터 다시 시작한다.
  • 만약, sum이 n보다 커지면 중첩 for 문을 종료하여 다음 i부터 다시 시작한다.
  • 모든 반복문이 종료되면 answer를 반환한다.
반응형