# [완전탐색][Lv2] - 카펫 자바스크립트 js

# 프로그래머스 문제

https://programmers.co.kr/learn/courses/30/lessons/42842 (opens new window)

# 시도 1.

입출력 예제를 보면 return의 가로세로에 각각 -2 를 한 값을 곱한 게 yellow라는 것을 알 수 있다.

따라서 옐로우가 만들어지는 모든 곱의 경우를 구하고, 그 수에+2를 하여 곱한 값이 yellow+brown과 같다면 그게 정답이다.

yellowList 를 구할 때 yellow의 제곱근까지만 탐색한다. 왜냐하면 제곱근을 기준으로 그 이후에는 숫자의 순서만 다른 동일한 값이 나오기 때문이다.

function solution(brown, yellow) {
    let answer = [];
    const yellowList = [];
    const yellowSqrt = Math.ceil(Math.sqrt(yellow));
    const total = brown+yellow;
    
    // 노랑이 나오는 경우의 수 모두 구하고
    for(let i=1; i<=yellowSqrt; i++){
        if(yellow%i === 0) yellowList.push([i, yellow/i]);
    }

    // 그 경우의 수에 +2씩 한 값이 total과 같다면 그게 정답
    for(let i=0; i<yellowList.length; i++){
        if( (yellowList[i][0]+2)*(yellowList[i][1]+2) === total ){
            answer.push(yellowList[i][1]+2);
            answer.push(yellowList[i][0]+2);
            break;
        }
    }

    return answer;
}
채점을 시작합니다.
정확성  테스트
테스트 1통과 (0.09ms, 30.2MB)
테스트 2통과 (0.09ms, 30MB)
테스트 3통과 (0.16ms, 30.1MB)
테스트 4통과 (0.11ms, 30MB)
테스트 5통과 (0.11ms, 30MB)
테스트 6통과 (0.15ms, 30.1MB)
테스트 7통과 (0.17ms, 30.1MB)
테스트 8통과 (0.16ms, 30.1MB)
테스트 9통과 (0.16ms, 30.1MB)
테스트 10통과 (0.11ms, 30MB)
테스트 11통과 (0.09ms, 30.2MB)
테스트 12통과 (0.09ms, 30.1MB)
테스트 13통과 (0.06ms, 30MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

# 다른 사람의 답변/질문에서 효율성 찾기

한번에 풀린거라 내 코드에서 개선할 사항이나 더 좋은 코드가 있을까 하고 다른사람들의 답변과 질문을 찾아봤다.

  1. 나는 노랑이 나오는 모든 경우의 수를 구한다음 total이랑 같은지 비교했는데 굳이 모두 구하지 않고 노랑이 나오는 경우의 수를 찾으면 바로 total과 같은지 비교해서 return 하는 게 좋을 것 같다.
Last Updated: 8/11/2022, 5:17:02 AM