본문 바로가기
프로그래머스 코딩테스트 문제/Level 2

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

by jyppro 2024. 11. 24.

숫자의 표현

 

문제 설명

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

 

시작 코드

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    return answer;
}

 

나의 풀이

 

#include <string>
#include <vector>
using namespace std;

int solution(int n)
{
    int answer = 1;// 자기 자신하나 카운트
    for (int i=1; i<n; i++)
    {
        int sum = 0, start = i;
        while (sum < n) sum += start++;// 같거나 커지기 전까지 더해준다.
        if (sum == n) answer++;// 같다면 answer++;
    }
    return answer;
}

 

코드 분석

처음 선언된 answer의 값을 1로 만들고 반복문을 돌립니다. 반복문 안에서 int형으로 sum을 0, start를 i로 초기화 해준다음, while문을 시작합니다. while문의 조건은 sum이 n보다 작을 때이고 그 안에서는 sum에 strart를 증가시킨 값을 더해줍니다. while문 이후 if문에서 sum이 n과 같다면 answer를 증가시키도록 합니다. 마지막엔 answer값을 리턴합니다.

 

풀이 설명

이번 문제에서 요구하는 것은 간단합니다. 주어진 자연수를 연속된 자연수로 표현하는 것입니다. 연속된 자연수는 위에 예시처럼 나열된 자연수의 합이 해당 숫자가 되는 것을 의미합니다. 이제 입출력 예를 통해 코드를 실행해보겠습니다.

 

자연수 n으로 15가 주어지고, answer는 1로 시작합니다. for문에 들어가면 sum과 start를 초기화하고, while문에 들어갑니다. while문에서는 처음에 sum이 0이고 n은 15이기 때문에 sum이 15보다 크거나 같아지기 전까지 실행합니다. 안에서는 start 그러니까 1로 시작하는 i값을 증가시키고 sum에 더해주는 것을 반복합니다. 이는 1 + 2 + 3...처럼 실행됩니다. 이 과정을 거쳐 sum이 15보다 커지면 while문을 빠져나오고 다음 if문에서 두 수가 같은지 체크하여 같으면 answer값을 올립니다. 여기까지가 for문의 시작점인 i가 1일때의 반복과정입니다. 이를 i가 n까지 반복하면 모든 과정이 완료되어 만들어진 answer값을 리턴하게 됩니다.

 

<NEXT>

오늘은 정답률 76%의 연습문제 "숫자의 표현" 문제를 다뤄보았습니다. 다음에는 "다음 큰 숫자" 문제를 다뤄보겠습니다. 감사합니다.