[프로그래머스, 42842] 카펫 (java)
Problem Solving/Programmers

[프로그래머스, 42842] 카펫 (java)

728x90

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

 

프로그래머스

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

programmers.co.kr

728x90

메모리: 75.5 MB, 시간: 0.05 ms

사용 알고리즘: 수학, 완전탐색

 

yellow의 가로 길이를 x, 세로 길이를 y라고 할 때,

yellow = x * y이다.

 brown은 yellow를 한 줄 감싸고 있으므로 yellow 위아래(x * 2) + yellow 왼쪽오른쪽(y * 2) + 4개의 모서리로 이루어져 있으므로 brown = (x * 2) + (y * 2) + 4이다.

이를 만족하는 xy를 완전 탐색을 통해 구하면 된다.

class Solution {
    public int[] solution(int brown, int yellow) {
        /**
        * yellow의 가로 길이 = x, 세로 길이 = y일때
        * yellow = x * y
        * brown = (2 * x) + (2 * y) + 4
        *
        * 완전탐색으로 가능한 x와 y를 구한다.
        * x와 y는 yellow의 가로, 세로 길이이기 때문에 answer는 +2 씩 되어야 한다.
        */
        
        int[] answer = new int[2];
        
        int y;
        for(int x = 1; x <= yellow; x++) {
            // x가 yellow의 약수인 경우에만 확인
            if(yellow % x != 0) continue;
            
            y = yellow / x;
            
            if(brown == 2 * x + 2 * y + 4) {
                if(x > y) answer = new int[] {x + 2, y + 2};
                else answer = new int[] {y + 2, x + 2};
                break;
            }
        }

        return answer;
    }
}
728x90