minzee
개발 기록장
minzee
전체 방문자
오늘
어제
  • 분류 전체보기 (94) N
    • 프로젝트 (1) N
      • CheriC 체리시 (1) N
      • Collec 콜렉 (0)
      • Homemaster 홈마스터 (0)
    • 회고록 (0)
    • CS 공부 (5)
    • 개발 공부 (26) N
      • Modern JS Deep Dive (5)
      • JavaScript & TypeScript (3)
      • React (0)
      • React-Native (0)
      • HTML & CSS (7)
      • Linux (2) N
      • Git & GitHub (1)
      • Kotlin (2)
      • Python (3)
      • C++ (2)
    • 코테 공부 (44)
      • BOJ (33)
      • Computer Algorithm (10)
      • Data Structures (1)
    • 활동 (15)
      • 우아한테크코스 7기 FE 프리코스 (4)
      • 원티드 프리온보딩 FE 챌린지 (1)
      • 위니브 엠버서더 3기 (10)
    • 학교 (3)

블로그 메뉴

  • Github
  • Naver Blog
  • Instagram
hELLO · Designed By 정상우.
minzee

개발 기록장

[프로그래머스] 카펫 - 완전탐색 (JS)
코테 공부/Computer Algorithm

[프로그래머스] 카펫 - 완전탐색 (JS)

2025. 4. 10. 22:27

프로그래머스 알고리즘 고득점 kit - 완전 탐색(=brute force) 문제

문제

처음 접근 시도

function solution(brown, yellow) {
    var answer = [];
    let isTrue = false;
    let carpet = brown + yellow;
    for (let i = 1; i < 10; i++){
        for (let j = 1; j < 10; j++){
            if (i * j == carpet && i >= j){
                answer.push(i);
                answer.push(j);
                isTrue = true;
            }
        }
        if (isTrue) break;
    }
    return answer;
}

이 코드에서의 문제점

1. 범위 제한 문제

  • 코드에서는 i와 j를 1부터 9까지의 범위로만 반복
  • 실제 카펫의 셀 수(brown + yellow)는 매우 클 수 있으며, 이 경우 9×9 범위 내에서는 올바른 가로와 세로 값을 찾을 수 X

2. 조건 체크 문제

  • 코드에서는 전체 격자 수(i * j == carpet)만 확인하고 있음
  • 문제에서는 "테두리 1줄이 갈색"이고 내부가 노란 셀임을 보장해야 하므로, [width - 2] × [height - 2] 즉, 내부의 yellow 영역이 정확히 yellow와 일치하는지 체크하는 추가 조건이 필요

풀이 

function solution(brown, yellow) {
    const total = brown + yellow;

    // height는 최소 3부터 시작 (테두리 1줄 때문에 내부 최소 영역은 1x1 이상)
    for (let height = 3; height <= total; height++) {
        if (total % height === 0) {  // height가 total의 약수인 경우
            const width = total / height;
            // 문제 조건: width >= height
            if (width < height) continue;

            // 내부 영역의 셀 수 (width-2) * (height-2)가 yellow와 일치하는지 확인
            if ((width - 2) * (height - 2) === yellow) {
                return [width, height];
            }
        }
    }

    return [];  // 문제 조건상 항상 답이 있으므로 이 부분은 실행되지 않음
}

 

 

 

 

아직까지는 이렇게 조건을 완벽히 설계하는게 어렵지만 하다보면 언젠간 할 수 있겠지 😂

저작자표시 (새창열림)

'코테 공부 > Computer Algorithm' 카테고리의 다른 글

[프로그래머스] 소수 찾기 - 완전탐색 (JS)  (0) 2025.04.08
[2024 알고리즘 특강] 공항 방문수 (파이썬)  (0) 2024.05.16
[2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)  (0) 2024.05.16
[2024 알고리즘 특강] 문자열/회문 (파이썬)  (0) 2024.05.16
[이코테] 두 배열의 원소 교체 (파이썬)  (0) 2024.04.05
    '코테 공부/Computer Algorithm' 카테고리의 다른 글
    • [프로그래머스] 소수 찾기 - 완전탐색 (JS)
    • [2024 알고리즘 특강] 공항 방문수 (파이썬)
    • [2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)
    • [2024 알고리즘 특강] 문자열/회문 (파이썬)
    minzee
    minzee
    🇩🇮🇬🇮🇹🇦🇱 🇲🇪🇩🇮🇦 & 🇸🇴🇫🇹🇼🇦🇷🇪 🇨🇴🇳🇻🇪🇷🇬🇪🇳🇨🇪

    티스토리툴바