개발조각

[프로그래머스] 숫자의 표현 본문

알고리즘🅰/프로그래머스

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

개발조각 2022. 4. 22. 17:24
728x90
반응형

이번 문제는 어떻게 구할지에 대한 규칙을 파악하면 쉽게 풀 수 있을 것 같습니다.

 


접근방법

이 문제는 연속된 자연수들로 n을 표현하는 방법의 수를 구하는 문제입니다.

n이 15일 경우 4가지로 표현할 수 있습니다.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

이렇게 연속되는 숫자로 구성이 되어야 됩니다.

 

그래서 제가 생각한 방법은 1+2+..., 2+3+... 반복해서 더한 값이 n을 구하는 방법입니다.

예시로 설명하겠습니다.

n=15인 경우

  • i=1 -> 1+2+3+4+5 = 15 : true
  • i=2 -> 2+3+4+5+6 = 20 : false
  • i=3 -> 3+4+5+6 = 18 : false
  • i=4 -> 4+5+6 = 15 : true
  • i=5 -> 5+6+7 = 18 : false
  • i=6 -> 6+7+8 = 21 : false
  • i=7 -> 7+8 = 15 : true

i가 무엇인지 따라 i부터 연속적인 숫자를 더해서 n=15보다 클때까지 반복하고

더한 값이 n=15인 갯수를 세면 됩니다.

true가 3개이고, 어떤한 수를 해도 자기 자신(n=n) 일 경우는 무조건 포함함으로 3+1 해서 4개입니다.

 

여기서 중요한 점은 i=7까지만 해도 됩니다.

연속되는 숫자들이 1개일때(15=15) 다음은 연속되는 숫자들이 2개일 때 임으로(15=7+8)

15/2=7.5 임으로 7까지만 반복하면 됩니다.


해결방안

function solution(n) {
    var answer = 1;
    
    for(let i=1; i< n/2; i++){
        let sum = 0;
        let num = i;
        while(sum < n){
            sum += num;
            num++;
            if(sum === n) answer++;
        }
    }
    return answer;
}

answer : 연속된 자연수들로 n을 표현하는 방법의 수가 몇 개인지

answer = 1을 해준 이유는 n이 어떤 숫자이든 n=n일 경우가 있기 때문입니다.

 

for문에서 i=1부터 시작하고 n/2까지 실행합니다.

n=15이면 i는 1~7까지 진행합니다.

 

sum : 연속된 자연수들 더한 값, 초기값으로 0으로 설정해 주었습니다.

num : 연속된 자연수, 초기값으로 i로 설정하여 i부터 더하게 해 주었습니다.

 

while문은 sum < n일 경우에만 실행하게 하였습니다.

while문을 돌릴 동안 i + (i+1) +... 이렇게 반복되도록 하였고

sum === num일 경우 answer에 +1을 해주었습니다.


프로그래머스 숫자의 표현 해결방안 설명은 여기까지입니다.

728x90
반응형
Comments