안녕하세요
프로그래머스 JS [카펫] 본문
- 카펫
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
문제 풀이 사각형의 변의 길이가 될 yellow의 약수를 구합니다 ( findDivisor() ) 닿아있는 두 변의 곱이 yellow, 두 변의 길이의 합이 brown / 2 - 2 가되는 수를 찾습니다. brown / 2 - 2 : 맞닿은 두 변의 길이의 합은 brown에서 모서리를 하나씩 빼 준 다음 2로 나누어준 값입니다. |
const findDivisor = (number) => {
const divisorArray = [];
let divisor = 1;
while (divisor <= number) {
if (number % divisor === 0) {
divisorArray.push(divisor);
}
divisor++;
}
return divisorArray;
};
function solution(brown, yellow) {
// yellow의 약수를 구합니다. => [1,2] yellow의 약수는 사각형의 한 변의 길이입니다.
const divisorArray = findDivisor(yellow);
for (let i = 0; i < divisorArray.length; i++) {
for (let j = i; j < divisorArray.length; j++) {
// 닿아있는 두 변의 곱이 yellow, 두 변의 길이의 합이 brown/2-2가 되는 수를 찾습니다.
if (divisorArray[i] * divisorArray[j] === yellow && divisorArray[i] + divisorArray[j] === brown / 2 - 2) {
return [divisorArray[j] + 2, divisorArray[i] + 2];
}
}
}
}
|
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [N개의 최소공배수] (0) | 2022.11.26 |
---|---|
프로그래머스 JS [영어 끝말잇기] (0) | 2022.11.26 |
프로그래머스 JS [[1차] 캐시] Map 객체 / LRU 알고리즘 (0) | 2022.11.12 |
프로그래머스 JS [멀리 뛰기] 피보나치 수열 (0) | 2022.11.11 |
프로그래머스 JS [예상 대진표] (0) | 2022.11.09 |