문제 설명

자연수 n을 연속한 자연수들로 표현하는 방법의 수를 return

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이법

이중 for문을 통해 문제를 풀 수 있다

 

바깥의 for문은 총 n번을 반복하는 것이고, 안쪽의 for문은 i를 초기값으로 가지기에 n - i 번을 반복하는 것이다

즉, 만일 n이 15, i가 12라면 3번 반복하는 것이다

연속하는 자연수를 찾기 위해서 이렇게 해두었다

i가 1이고, n이 15라면 1, 2, 3.....15까지 더하는 과정을 진행하고, 다음 i가 2가 되면 2, 3, 4.....15까지 더하는 과정을 반복하는 로직이다

 

이때 만일 더한 값이 n과 같다면 for문을 빠져나오게 했다

else if문으로 더한 값이 n보다 크다면 이때도 for문을 빠져나오게 했는데, 이걸 하지 않으면 효율성 테스트를 통과하지 못한다

 

 

소스 코드

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    for (int i = 1; i <= n; i++) {
        int tmp = 0;
        
        for (int j = i; j <= n; j++) {
            tmp += j;
            if (tmp == n)
                break ;
            else if (tmp > n)
                break ;
        }
        if (tmp == n)
            answer++;
    }
    return answer;
}
복사했습니다!