난이도: Lv.2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42842
알고리즘
카펫은 n x m 이므로 갈색 격자 수와 노란색 격자 수를 합치면 n x m이다. 따라서 전체 격자 수의 약수 중에서 정답이 존재한다.
갈색 격자의 수는 (n x 2) + (전체격자수 / n - 2) x 2 이다. 이때 전체격자수 / n이 m이다. 전체 격자 수의 약수 중에서 잘색 격자 수를 계산했을 때 일치하는 것이 정답이다.
문제에서 카펫의 가로 길이가 세로 길이보다 길다고 했으므로 m을 먼저 넣고 n을 넣으면 된다.
코드
function solution(brown, yellow) {
var answer = [];
const totalTile = brown + yellow;
const endLoop = Math.trunc(Math.sqrt(totalTile));
for (let i = 3; i <= endLoop; i++) {
if (totalTile % i === 0) {
if (i * 2 + (totalTile / i - 2) * 2 === brown) {
answer.push(totalTile / i);
answer.push(i);
break;
}
}
}
return answer;
}
주저리
글을 쓰다가 깨달은 것이지만 노란 격자 수로 계산하는 게 더 쉬웠을 것 같다. 완전 탐색 문제가 뭔지 잘 몰라서 ㅎㄷㄷ 하면서 들어갔는데 별거 아니어서 다행이다.
'코딩테스트' 카테고리의 다른 글
[JS] 점프와 순간이동 (1) | 2023.11.29 |
---|---|
[JS] 영어 끝말잇기 (0) | 2023.11.17 |
[JS] 짝지어 제거하기 (0) | 2023.11.15 |
[JS] 피보나치 수 (0) | 2023.11.13 |
[JS] 다음 큰 숫자 (0) | 2023.11.13 |