본문 바로가기
자료구조 & 알고리즘

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

by PARADISE247 2024. 12. 10.
반응형
 

프로그래머스

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;
반응형