FE PARADISE

프로그래머스 카펫 - 자바스크립트 풀이 본문

자료구조 & 알고리즘

프로그래머스 카펫 - 자바스크립트 풀이

PARADISE247 2024. 12. 10. 00:08
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

완전탐색을 활용하는 문제임을 알고 완전탐색을 어떻게 사용하지 생각하다가 시간을 다 까먹어버렸다 ㅠㅡㅠ

풀이

노란 카펫의 수 = (가로 - 2) * (세로 - 2) 임을 활용해야 한다.

function solution(brown, yellow) {
    let answer = [];
    for(let i = 3; i< brown + yellow; i++){
        let width = Math.floor((brown + yellow) / i);
        if(((width - 2) * (i - 2)) === yellow && width >= i && (brown + yellow) % i === 0) answer = [width, i]; 
    }
    return answer;
}

for문을 돌면서 순차적으로 세로를 가정한다. 가운데 노란 카펫이 위치하는 것을 생각해보면 세로는 3보다는 클 것이므로 i = 3 으로 시작한다. 

가로는 (갈색 카펫 수 + 노란 카펫 수 ) / 높이 이다. 

for(let i = 3; i< brown + yellow; i++)
        let width = Math.floor((brown + yellow) / i);

 

다음과 같은 조건이 성립되는 가로, 세로 길이가 정답이 된다. 

조건1: 노란 카펫 수가 (가로 - 2) * (세로 - 2) 

조건2: 가로가 세로 길이보다 길거나 같다.

조건3: (갈색 카펫 수 + 노란 카펫 수) / 세로 의 나머지는 0이어야 한다. 

if(((width - 2) * (i - 2)) === yellow && width >= i && (brown + yellow) % i === 0)
	answer = [width, i];

 

이 후, answer을 반환해주면 끝이다. 

return answer;
반응형