프로그래머스/Lv2

[프로그래머스/Javascript] Lv.2 카펫

woo.oing 2026. 2. 3. 18:11

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

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

programmers.co.kr

 

 

✓ 문제

 

노란 카펫의 갯수 yellow 와 그 카펫을 감싸는 1줄 테두리인 갈색 카펫의 갯수 brown 으로 전체 카펫의 [가로, 세로]를 반환

카펫은 정사각형이거나, 가로로 긴 직사각형



✓ 풀이과정

 

 

임의의 h 기준으로 하나씩 증가하며 아래 조건을 만족하는 w를 발견

- 1개의 노란색 카펫의 테두리가 되는 2개의 갈색 카펫이 있기 때문에 카펫의 최소 h = 3
- 카펫은 정사각형 또는 가로가 긴 직사각형이라는 조건이 있으므로 h <= w 인데 카펫의 총 개수는 가로 * 세로와 동일 carpets(brown + yellow) = w * h, w = carpets / h 따라서 h <= carpets / h 까지만 확인
- 노란색 카펫은 갈색 테두리 한 줄을 제외한 만큼이기 때문에 yellow = (w - 2) * (h - 2)



✓ 최종코드

function solution(brown, yellow) {
  let carpets = brown + yellow;
  let h;
  let w;

  for (h = 3; h <= carpets / h; h++) {
    w = carpets / h;
    if (carpets % h === 0 && yellow === (w - 2) * (h - 2)) break;
  }

  return [w, h];
}