본문 바로가기

프로그래머스 2단계 - 카펫 본문

알고리즘/2단계

프로그래머스 2단계 - 카펫

개발자로 거듭나기 2023. 3. 5. 15:31
반응형

2 단계 : 카펫

코딩테스트 연습 > 완전탐색 > 카펫


문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

carpet.png

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.


제한사항
  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

입출력 예
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

반응형

코드

function solution(brown, yellow) {
    // 총 구할 면적
    const total_area = brown + yellow;
    
    // return 할 배열
    const answer = [];
    
    // 예시 1번을 토대로 말씀드리겠습니다.
    // 왜 반복문을 거꾸로 타느냐 하면은 카펫의 가로길이가 더 길어야 하기 때문입니다. (width) 값이요
    
    for(let width = total_area; width > 0; width--) {
        // width는 12, 11, 10 .... 이렇게 나오는데
        // 나누어 지지않으면 height 값이 존재하지 않겠죠? 소수점은 아닐거잖아요?
        if(total_area % width) continue;
        
        // 이 밑으로 들어오는 width값은 total_area(12)의 약수 값, 12, 6, 4, 3, 2, 1 순서대로 들어오겠죠?
        
        // 그래서 width값이 결정되면 height 값은 total_area = width * height라서 height를 구해줍니다.
        const height = total_area / width; 
        
        const total_yellow = (width - 2) * (height - 2); // 그림으로 설명하겠습니다.
        const total_brown = total_area - total_yellow;
        
        // 그래서 임의로 구한 total_yellow와 total_brown값이 Leo가 기억한 갯수와 같다면 그게 정답이겠죠?
        if(total_yellow === yellow && total_brown === brown) {
            answer.push(width);
            answer.push(height);
            break;
        }
    }
    
    return answer;
}

 

리뷰

주석과 이미지로 설명을 대체합니다.

desc


총평 : 항상 생각하는게 어렵네요

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42842
반응형
Comments