본문 바로가기
코딩테스트/프로그래머스

프로그래머스 카펫 문제풀이, 해설 알고리즘 문제

by 코드스니펫 2024. 2. 10.
반응형

프로그래머스 카펫 문제풀이, 해설 알고리즘 문제

 

programmers logo

 

프로그래머스 카펫 문제 소개와 해설, 필자의 문제풀이 과정에 대해 소개하겠습니다. 아래 풀이 과정을 보면서 코딩에 있어서 유익한 인사이트를 얻길 바랍니다.  

 

 

프로그래머스 카펫 문제

 

문제 설명

Leo는 카펫을 사러 갔다가 중앙에는 노란색으로, 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 보았습니다. 주어진 갈색 격자의 수와 노란색 격자의 수를 토대로 카펫의 크기를 구하는 문제입니다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

자세한 카펫 문제를 확인하세요

 

 

기존 코드

function solution(brown, yellow) {
  let answer = [];
  let commonFactors = [];
  const num = yellow + brown;

  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      let j = num / i;
      if (j > i) commonFactors.push([j, i]);

      if (i === j) return [i, j];
    }
  }
  const result = commonFactors[commonFactors.length - 1];

  answer.push(...result);
  return answer;
}

console.log(solution(10, 2));
console.log(solution(24, 24));
console.log(solution(8, 1));
console.log(solution(18, 6));

 

 

문제 발생

일부 테스트 케이스에서 오류가 발생하며, 해결이 어려웠습니다.

 

 

오류 원인

일부 경우에서 (width - 2) * (height - 2) 값이 yellow와 일치하지 않아서 발생한 오류입니다.

 

 

코드 수정

방안 격자의 크기를 구할 때, 추가로 검사를 수행하여 적절한 조합을 찾아내야 합니다.

 

 

수정한 코드

function solution(brown, yellow) {
  let answer = [];
  let commonFactors = [];
  const num = yellow + brown;

  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      let j = num / i;
      if (j > i) commonFactors.push([j, i]);

      if (i === j) return [i, j];
    }
  }

  // 여기서 commonFactors 배열을 검사하여 적절한 조합을 찾음
  for (let k = 0; k < commonFactors.length; k++) {
    const [width, height] = commonFactors[k];
    const yellowCount = (width - 2) * (height - 2);

    if (yellowCount === yellow) {
      answer = [width, height];
      break;
    }
  }
  return answer;
}

console.log(solution(10, 2));
console.log(solution(24, 24));
console.log(solution(8, 1));
console.log(solution(18, 6));

 

 

코드 설명

  • 처음으로 구한 width와 height를 이용하여 추가 검사를 수행하여 정확한 조합을 찾습니다.
  • (width - 2) * (height - 2) 값이 yellow와 일치해야 합니다.

 

예시 설명

예시로 주어진 코드는 주어진 갈색과 노란색 격자 수에 대해 카펫의 크기를 반환해야 합니다. 수정한 코드는 일부 케이스에서 오류가 발생하지 않도록 추가 검사를 수행하여 적절한 결과를 반환합니다.

 

▼ 아래 문제 풀어보셨나요? ▼

 

 

프로그래머스 최소직사각형 해설, 문제풀이 과정, 알고리즘 최적화

프로그래머스 최소직사각형 해설, 문제풀이 과정, 알고리즘 최적화 프로그래머스 최소직사각형 문제 소개와 해설, 필자의 문제풀이 과정과 최적화된 알고리즘 문제풀이에 대해 소개하겠습니다

lemonlog.tistory.com

 

 

프로그래머스 부족한 금액 계산하기 해설, 문제풀이 과정

프로그래머스 부족한 금액 계산하기 해설, 문제풀이 과정 프로그래머스 내적 문제 소개와 해설, 필자의 문제풀이 과정과 가장 인기 있던 문제풀이에 대해 소개하겠습니다. 아래 풀이 과정을 보

lemonlog.tistory.com