# [완전탐색][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
# 다른 사람의 답변/질문에서 효율성 찾기
한번에 풀린거라 내 코드에서 개선할 사항이나 더 좋은 코드가 있을까 하고 다른사람들의 답변과 질문을 찾아봤다.
- 나는 노랑이 나오는 모든 경우의 수를 구한다음 total이랑 같은지 비교했는데 굳이 모두 구하지 않고 노랑이 나오는 경우의 수를 찾으면 바로 total과 같은지 비교해서 return 하는 게 좋을 것 같다.