반응형
프로그래머스 카펫 문제풀이, 해설 알고리즘 문제
프로그래머스 카펫 문제 소개와 해설, 필자의 문제풀이 과정에 대해 소개하겠습니다. 아래 풀이 과정을 보면서 코딩에 있어서 유익한 인사이트를 얻길 바랍니다.
프로그래머스 카펫 문제
문제 설명
Leo는 카펫을 사러 갔다가 중앙에는 노란색으로, 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 보았습니다. 주어진 갈색 격자의 수와 노란색 격자의 수를 토대로 카펫의 크기를 구하는 문제입니다.
자세한 카펫 문제를 확인하세요
기존 코드
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와 일치해야 합니다.
예시 설명
예시로 주어진 코드는 주어진 갈색과 노란색 격자 수에 대해 카펫의 크기를 반환해야 합니다. 수정한 코드는 일부 케이스에서 오류가 발생하지 않도록 추가 검사를 수행하여 적절한 결과를 반환합니다.
▼ 아래 문제 풀어보셨나요? ▼
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 해시(hash) 문제 - 폰켓몬 풀이 과정 및 리팩토링 (0) | 2024.03.10 |
---|---|
프로그래머스 피보나치 수 문제풀이, 해설 (1) | 2024.02.11 |
프로그래머스 과일 장수 문제풀이 과정, 알고리즘 최적화 (1) | 2024.01.08 |
프로그래머스 문자열 다루기 기본 해설, 인기 있는 문제풀이 (1) | 2023.12.29 |
프로그래머스 시저함수 문제 풀이, 해설, 알고리즘 코딩테스트 (0) | 2023.12.05 |