알고리즘, 자료구조/프로그래머스
[Javascript] 프로그래머스 카펫
jaee
2020. 6. 29. 20:05
문제
https://programmers.co.kr/learn/courses/30/lessons/42842
코딩테스트 연습 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 ��
programmers.co.kr
완전 탐색으로 분류된 문제지만 나는 완전 탐색으로 접근하진 않았다. 이 문제에서 생각해야 될 부분은 yello로 주어진 파라미터가 모두 카펫 안에 들어가야 된다는 것이다.
풀이 과정
function solution(brown, yellow) {
let answer = [];
// row: 카펫의 가로길이, col: 카펫의 세로길이
// row >= col 이므로, row 선언 동시에 최솟값을 할당하고, col은 이후 할당함
let row = Math.sqrt(brown + yellow), col;
// row가 정수이면 정사각형 카펫이므로, 동일한 값을 가로세로에 넣어 반환
if(row % 1 === 0){
return [row, row]
// row가 정수가 아니면 정사각형 카펫이 아니므로(row는 col 이상)
}else{
// i: 노란색(안쪽) 네모칸의 가로 길이
for(let i = Math.ceil(row) - 2; i <= yellow; i++){
// col: 노란색(안쪽) 네모칸의 세로 길이
col = yellow / i;
// 테두리는 한 줄 -> i + 2는 카펫 가로 길이, col + 2는 카펫 세로 길이가 된다
if((i + 2) * (col + 2) === brown + yellow){
return [i + 2, col + 2]
}
}
}
}
테스트케이스