카펫 level 2 자바

Heeeoh·2024년 4월 2일
0

프로그래머스

목록 보기
25/26
post-thumbnail

🧫 문제 분석

✔️ 출처

카펫 level 2

📖 문제

핵심
가로 길이 >= 세로길이
가로 세로 길이를 구하되 갈색과 노란색의 개수가 맞아야함


🔅 문제 풀이

좀 이상하게 풀었는데
우선 가로 세로를 찾기위해 약수를 구한다. 약수가 가로 세로가 된다.
약수를 check 메서드에 넘긴다.

check 메서드는
가로가 위아래로 2개 있으므로 가로 길이 x 2를 해준 다음 전체 갈색개수에서 빼준다.
이를 2로 나누면 사각형에서 양 옆의 개수가 된다.

위 예시와 같이 4 / 2 = 2 세로 옆구리가 2다.

이 값이 매개변수로 넘어온 약수로 찾은 가로세로중 세로 길이 - 2 한 값보다 작거나 같으면
정상적으로 사각형이 성립된다.

만약 옆구리가 2 고 약수로 찾은 세로가 1이면 갈색이 1 남는다.. 이러면 아닌 것이다.

class Solution {
    public int[] solution(int brown, int yellow) {

        // 너비는 brown + yellow 와 같다. 
        // 가로 길이 >= 세로
        int area = brown + yellow;

        for (int i = 3; i < 5001; i++) {
            if (area % i == 0 && (area / i) <= i ) {   
                if (check(new int[] {i, area/i}, brown, yellow)) 
                    return new int[] {i, area/i};     
            }
        }
        return null;
    }

    public boolean check(int[] arr, int br, int ye) {
        int temp = (br - (arr[0] * 2)) / 2;
        if (temp <= arr[1] - 2)
            return true;

        return false;
    }
}


다른 사람 풀이를 보며

(가로 - 2 ) x (세로 - 2)= 노란색 넓이
이걸 생각해내지 못했다...ㅠㅠ

약수를 찾아서 가로 세로를 구하고
(가로 -2) x (세로 -2) == 노란색 넓이 로 조건문을 걸어서 참이면 그것이 가로세로 정답이다.


❗ 오답노트 / 필요한 지식

  1. 나름 생각해서 원칙을 찾아본다고 한게 저 풀이인데 많이 아쉽다. 하지만 풀었으니 다행이다.
profile
열심히 살자

0개의 댓글