Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만
전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown,
노란색 격자의 수 yellow가 매개변수로 주어질 때
카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 작성해주세요
이렇게 나오게 하는 문제이다.
간단하게 brown 과 yellow를 더해서 그 값의 약수를 찾고 그 안에서 해결하면 되겠다가 1차 생각.
그리고 가로 세로가 무조건 3은 넘는다는 사실을 깨달았다.
그럼 반복문을 돌릴때 i가 3부터 시작하면 되겠구나!! 2차 생각
그렇게 첫번째 코드 작성
function solution(brown, yellow) {
var answer = [];
var res = brown + yellow;
for(let i=3; i<= brown; i++){
if(res % i == 0){
let weight = res/i;
if(i >= weight && weight >=3){
return [i, weight];
}
}
}
return answer;
}
이렇게 작성했다... 하지만 테스트케이스에서 차단당함..
왜 뭐가 문제일까 생각을 했는데 18, 6 [8,3]으로 테스트를 다시 해본 결과 이 숫자는 되지 않았다.
여기서 i는 [4,6,8,12,24]이고 weight는 [6,4,3,2,1]이다
내가 작성한 if문을 통해 하나씩 걸러내보면 [6,4]와 [8,3] 2개가 남게 된다. 결론적으로 이 2가지 경우 모두 다 해당되게 된다는 것이다.ㅠㅠ
그럼 어떻게 해결할까.. 생각하다가 yellow를 이용해보자~~!!
그래서 (i-2)*(weight-2) === yellow)
이런식으로 했는데 되었다ㅠㅠㅠㅠㅠ
function solution(brown, yellow) {
var answer = [];
var res = brown + yellow;
for(let i=3; i<= brown; i++){
if(res % i == 0){
let weight = res/i;
if((i-2) * (weight -2) === yellow){
return [weight, i];
}
}
}
return answer;
}
10 , 2 [4,3] 이라는 테스트케이스로 설명을 해보자면
여기서 i
는 [3,4,6]
, weight
는 [4,3,2]
가 된다.
이 친구들을 짝지어 본다면 [3,4]
, [4,3]
, [6,2]
이렇게 3가지로 나뉘게 된다.
그럼 i와 weight에서 각각 2를 빼보자! 그렇게 돼서 yellow와 수가 같아지는 것은
[4,3]
이므로 정답이 4,3이 되는 것이다..