[프로그래머스] 카펫

정호·2023년 6월 1일
0

문제 풀이

목록 보기
21/60

문제 링크

1️⃣ 문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.


2️⃣ 제한 사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

3️⃣ 입출력 예

4️⃣ 나의 풀이

function solution (brown, yellow) {
    const answer = [];
    const CARPET_SIZE = brown + yellow;
    //카펫의 최소 너비, 높이 : 3
    for(let i = 3; i < CARPET_SIZE; i++){
    	let width = CARPET_SIZE / i;
    	let height = i;
      	//카펫은 항상 가로 길이가 세로 길이보다 같거나 크다. (조건에 해당하지 않으면 continue)
    	if(width < height) continue;
		//yellow 전체
    	if((width - 2) * (height - 2) == yellow) {
        	answer [0] = width;
        	answer [1] = height;
    	}
	}
	return answer;
}

// test
console.log(solution(15)); // 4
  • 노란 격자 수의 개수는 최소 1개
    - 이걸 감싸기 위한 최소 갯수 또한 가로 3 세로 3으로 지정
  • 갈색 격자, 노란색 격자를 더해 카펫 전체 면적을 특정 높이에서 나누고, 그것을 (가로-2)*(세로-2)로 한다.
    - 노란색 격자 수와 일치하면 widthheight가 카펫의 가로 세로가 된다.
  • 노란색 격자는 주변에 양 옆 모서리를 제외하여 가로, 세로 -2씩 해준다.
profile
열심히 기록할 예정🙃

0개의 댓글