본문 바로가기

프로그래머스

6/22[TIL] 프로그래머스 Lv2 카펫

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

 

[문제풀이]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(brown, yellow) {
    
    let answer = [];
    let totalSize = brown + yellow;
  
    for (let x = 3; x <= totalSize; x++) {
        
        let y = totalSize / x;
    
        if (Number.isInteger(y) && y >= x && (y - 2* (x - 2=== yellow) {
            answer.push(y);
            answer.push(x);
            break;
        }
    }
    return answer;
}
cs

 

이런 문제를 풀면서 느끼는 것은 무작정 코드를 작성하는 것 보다는 규칙을 찾아서 이에 맞게 수도코드를 작성하고 진행하면 더욱 수월히 풀리는 것 같다.

 

문제를 읽어보고 파악해보면 최소 세로 길이(x)는 3 이상 일 수 밖에 없고

갈색과 노란색의 수를 합한 값을 세로 길이(x)로 나누었을 때 나누어 떨어져야 하며 이 때 몫은 카펫의 가로 길이(y)가 된다. 갈색 테두리 안에 노란색이 들어가 있기에 통상 직사각형의 너비를 구하는 식을 이용해 가로 길이(y)에서 2를 뺀 값과 세로 길이(x)에서 2를 뺀 값을 곱했을 때 yellow가 나와야 하며 Number.isInteger() 메서드는 주어진 값이 정수인지 판별하는 것이다.

 

그리고 answer에 가로 길이(y)와 세로 길이(x)를 각각 push 하는 식으로 구현했다.