알고리즘

프로그래머스 카펫 (JAVA)

박카스마시며코딩 2022. 9. 12. 19:40

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

 

프로그래머스

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

programmers.co.kr

 

저는 수학식을 정리하고 완전탐색을 통해 문제를 해결하였습니다.

먼저 세로를 n, 가로를 m이라 한다면,

brown = 2*n + 2*m - 4 

yellow = n*m - 2*n - 2*m + 4 => yellow = n*m - (2*n + 2*m - 4)

yellow + brown = n*m

이라는 식으로 정리할 수 있습니다.

저는 완탐을 돌면서 첫번째 식과 세번째 식에 맞는지를 확인하고 맞다면 그 값을 리턴하도록 구현하였습니다.

 

 

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = cal(brown,yellow);
        return answer;
    }
    private static final int INF = 987654321;
    private static int[] cal(int brown, int yellow){
        int sum = brown + yellow;
        for(int i = 3 ; i < INF; i++){
            for(int j = i ; j < INF; j++){
                int mul = i*j;
                if(mul == sum && 2 * i + 2 * j - 4 == brown ){
                    return new int[] {j,i};
                }else if(mul > sum || mul < 0){
                    break;
                }
            }
        }
        return new int[] {0,0};
    }
}