준영이의 성장일기(FrontEnd)

프로그래머스 - 카펫 본문

코테 및 알고리즘

프로그래머스 - 카펫

Jay_Jung 2024. 6. 28. 13:13

 

<문제>

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

 

프로그래머스

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

programmers.co.kr

 

 

<문제 핵심>

1.  문제 분류는 '완전 탐색' 문제 이고 문제에서 요구하는 규칙성을 찾는 문제 였다.

 

2.  예시 그림 3행 4열 그림을 보고 최소 높이가 3임을 파악했어야 함

 

프로그래머스 문제 그림

 

<문제 풀이과정 및 순서도>

1. 매개변수로 주어진 brown과 yellow를 합쳐서 newCount 변수를 만든다.

let answer = [];
let newCount = brown + yellow;

 

2. 최소 높이인 3부터 반복문을 돌리며 newCount에서 임의의 높이를 나눠주고 그때의 가로, 세로 길이를 구한다.

테두리를 제외해야 하기 때문에 가로,세로에 각각 -2씩 적용해주고 서로 곱해서 결과적으로 노랑색의 갯수를 구한다.

✅ 루프를 다 돌았지만 조건을 만족하는 weight, height를 찾지 못했을 때는 빈 배열인 answer를 return 한다.

for(let height=3; height<=brown; height++){
        //임의의 높이로 나눌때 나머지가 없을경우만
        if(newCount % height === 0) {
            //가로길이
            let weight = newCount / height;
            
            //테두리를 제외한 길이를 구해야하기 때문에 각각 -2해준뒤 곱셈
            //결과가 yellow와 같다면 해당 높이와 길이 리턴
            if( (height-2) * (weight-2) === yellow){
                return [weight, height];
            }
        }
}
return answer;

 

 

<전체 코드>

function solution(brown, yellow) {
    let answer = [];
    let newCount = brown + yellow;
    
    for(let height=3; height<=brown; height++){
        //임의의 높이로 나눌때 나머지가 없을 경우
        if(newCount % height === 0){
            //가로길이
            let weight = newCount / height;
            
            //테두리를 제외한 길이를 구해야하기 때문에 각각 -2해준뒤 곱해주기
            //결과가 yellow와 같다면 해당 높이와 길이 리턴
            if( (height-2) * (weight-2) === yellow){
                return [weight, height];
            }
        }
    }
    return answer;
}