프로그래머스 - 숫자의 표현

이서현·2021년 8월 5일
0

Algorithm

목록 보기
66/76
post-thumbnail

08.05에 푼 문제입니다🌷
숫자의 표현

첫번째 풀이

function solution(n) {
    var answer = 1;
    let nums = []
    for(let i=1;i<=n;i++)nums.push(i)
    
    for(let i = 1;i<=n;i++){
        let calnum = i
        for(let j=i+1;j<=n;j++){
            calnum+=j
            if(calnum===n){
                answer++
                break
            }
        }
    }
    return answer;
}

효율성을 생각 안해서 2중 for 문으로 풀었다. 효율성 테케를 통과하지 못했다 ㅠ

두번째 풀이

효율성을 생각해서 투포인터로 풀었다.
투포인터는 연속된 수를 구할 때 많이 사용한다.

풀이법

투포인터 풀이는 간단하다.
start 변수와 end 변수를 따로 보고
start 번지에서 end 번지까지 더한 값이 작으면 end 변수에 1을 더해서 확장시킨다.
더한 값이 맞으면 answer를 증가시키고
start에 1을 더해서 미뤄준다.

코드

function solution(n) {
    var answer = 0
    let nums = []
    for(let i=1;i<=n;i++)nums.push(i)
    let start = 0
    let end = 0
    let total = 0
    while(start<nums.length){
        while(total<n&&end<nums.length){
            total+=nums[end++]
        }
        if(total===n) answer++
        total -= nums[start]
        start++
        
    }
    
    
    return answer;
}

다른 분의 풀이

어마어마한 풀이를 봤다..
n의 약수에서 홀수의 개수가 정답인 것이다.
수학적으로 가능한건지 궁금하다🤔

function solution(n) {
    var answer = 0
    for(var i=1; i<=n; i++) {
        if (n%i == 0 && i%2 == 1)
          answer++
     }
    return answer;
}
profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글