✏️ 문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown | yellow | return |
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
※ 공지 - 2020년 2월 3일 테스트케이스가 추가되었습니다.
※ 공지 - 2020년 5월 11일 웹접근성을 고려하여 빨간색을 노란색으로 수정하였습니다.
✏️ 문제 풀이
function solution(brown, yellow) {
let sum = brown + yellow;
// 카펫의 최소높이 3
for (let h = 3; h < Math.floor(sum/2); h++) {
if (sum % h === 0) {
let w = sum / h;
// 테두리를 제외한 길이를 구해야하기 때문에 -2
if ((h-2) * (w-2) === yellow) {
return [w, h];
}
}
}
}
중앙에 있는 노란색은 한 개 이상이므로 갈색은 최소 3개, 즉 카펫의 최소 높이, 너비는 3이 된다.
노란색이 최소 1개 일 때 [가로, 세로]의 값은 sum을 반 나눈 값 이하이다. 그 안의 범위에서 딱 나눠 떨어지는 값을 구해(그 중 가로가 제일 큰 값) 테두리를 제외하고 값을 곱해 yellow 개수와 동일한지 확인한다.
🙂 공부하며 정리하는 글입니다. 공감과 피드백 환영합니다.
'Algorithms > 코테 문풀' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 - JavaScript (0) | 2023.02.03 |
---|---|
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2023.02.03 |
[완전탐색] 모의고사 - JavaScript / 반복문 성능 (0) | 2023.02.01 |
[프로그래머스] 시저 암호 - JavaScript (1) | 2023.01.30 |
[프로그래머스] 예산 - JavaScript (0) | 2023.01.26 |