프로그래머스 - 카펫

Lellow_Mellow·2023년 4월 15일
1
post-thumbnail

⭐ Lv. 2 - 카펫

✅ 문제 설명

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

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

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


✅ 제한사항

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

✅ 입출력 예

brownyellowreturn
102[4, 3]
81[3, 3]
2424[8, 6]

✅ 풀이 코드 + 설명

문제를 처음 접했을 때, 주어진 값들을 바탕으로 방정식을 만들어 해결이 가능하겠다 생각하였습니다. 다만, 이보다 더 단순하게 해결이 가능할 것 같아 다음과 같이 간단하게 해결하였습니다.

  • 순회를 짧게 하기 위해 yellow를 기준으로 1부터 yellow까지 순회합니다.
  • yellow를 나눈 나머지가 0i인 경우
    - i X yellow / i로 타일 배치가 가능한 경우이므로, yellow 겉을 감싸고 있는 brown까지의 타일 수를 합한 것과 (i + 2) * (yellow / i + 2)가 동일한지 판단합니다.
  • 결과를 출력합니다.
function solution(brown, yellow) {  
    for(let i = 1; i <= yellow; i++) {
        if(yellow % i === 0 && brown + yellow === (i + 2) * (yellow / i + 2)) {
            return [yellow / i + 2, i + 2];
        }
    }
}

profile
잔잔한 물결에서 파도로, 도약을 위한 도전. 함께하는 성장

0개의 댓글