본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 2) 숫자의 표현

by Chaedie 2022. 7. 2.
728x90

[Javascript] (프로그래머스 level 2) 숫자의 표현

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(n) {
    // 1) 부분합인거 같은데 일단 투포인터로 O(n!)로 해보자.
    let sum = 0;
    let count = 0;
    for (let p1 = 1; p1 < n; p1++) {
        sum = p1;
        for (let p2 = p1 + 1; p2 < n; p2++) {
            sum += p2
            if (sum === n) {
                count++;
                break;
            }
            if (sum > n) {
                break;
            }
        }
    }

    // n 하나 있는 케이스
    return count + 1
}

효율성  테스트
테스트 1 〉    통과 (31.23ms, 32.1MB)
테스트 2 〉    통과 (27.43ms, 32.2MB)
테스트 3 〉    실패 (시간 초과)
테스트 4 〉    실패 (시간 초과)
테스트 5 〉    통과 (28.02ms, 32.2MB)
테스트 6 〉    실패 (시간 초과)
  • 역시 투포인터로 풀면 정답은 맞는데 시간 초과 나온다.

내 풀이 2 부분 합

function solution(n) {
    // 1) 부분합인거 같은데 일단 투포인터로 O(n!)로 해보자.
    let sum = 1;
    let count = 0;
    let p1 = 1;
    let p2 = p1 + 1
    //2) 투포인터 시간초과 -> 부분합 ㄱㄱ
    while (p1 < n) {

        while (p2 < n) {
            sum += p2;
            if (n === sum) {
                count++;
                break;
            }
            if (n < sum) {
                break;
            }
            p2++;
        }
        sum -= p2;
        sum -= p1;
        p1++;
    }

    // n 하나 있는 케이스
    return count + 1
}
  • while은 정말 헷갈립니다. 부분합도 for문으로 할 수 있을 것 같은데요. 그걸 연습해야하나..?

배운 점, 느낀 점

  • 푼 사람이 많이 없는 문제는 "다른 사람 풀이"에 최근 풀이를 찾기 힘드네요...
  • 다들 쉬운 문제는 그냥 넘기고 중요한 문제만 푸시나봐요.. ㅠ
  • 직접 풀면서 배우는 점도 있지만, 다른 사람 풀이 보는게 진짜 제대로 공부가 되더라구요. 조금 아쉽네요

댓글