노란색 카펫이 가운데 있고 갈색 카펫이 노란색의 모든 주변을 덮고있는 카펫의 총 가로 세로 길이를 구하는 문제이다.
문제: https://programmers.co.kr/learn/courses/30/lessons/42842
노란색의 가로,세로가 노란색 개수의 약수이므로, 각각의 경우의 수를 brown이 맞는지 체크해주면된다.
가로가 세로보다 커야되기 때문에 row를 yellow부터 시작해 for문을 돌린다.
column(세로의길이)는 yellow를 row로 나누어준것이다.
row와 column이 자연수일 때만 입력받은 brown의 개수와 같으면 정답이다.
전체 카펫의 길이를 구하는 것이므로 row,column에 +2씩해줘서 출력한다.
function solution(brown, yellow) {
for(let i=yellow; i>0; i--){
const anotherNum = yellow/i
if(Number.isInteger(anotherNum)){
const tmpArr = [i,yellow/i]
if(checkBrown(brown,tmpArr)) return tmpArr.map(v=>v+2)
}
}
}
function checkBrown(brown,arr){
const checkNum = 2*(arr[0]+arr[1]+2)
if(brown===checkNum) return true
}
생각해보면,,,, 내가푼 풀이는 노란색 카페트가 직사각형을 이루고 있을 때만 가능한 경우이다. 만약 yellow가 3개라면.. 다른식으로 접근해야 될것이다.