티스토리 뷰

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    int a = n;
    int b = 1;
    a -= 1;
    while(a>0){
        b += 1;
        a = a-b;
        if(a%b == 0) answer += 1;
    }
    return answer+1;
}

어디선가 풀어봤던 문제였다. 그것만 생각나고 풀이가 제대로 생각나지 않아서 다시 깃허브에서 확인했다.

이거는 정말 기가막힌 규칙이 있다.

 

n 값이 15일 때,

- 2개로 나누어 떨어지는 경우 

( 15 - (1+2) ) / 2 => 6

(6+1) + (6+2) == 15

 

-3개로 나누어 떨어지는 경우

( 15 - (1+2+3) ) / 3 => 3

(3+1) + (3+2) + (3+3) == 15

 

이렇게 진행된다..

처음에는 이게 왜 코드가 이렇게 될까 규칙을 발견하는게 아니라 억지로 규칙에 틀을 맞춘거 같았는데 어쨋거나 넘나 유용한 코드인 것 같다.  

댓글