Algorithm/Programmers

[Lv.2] 카펫 : Java

say! 2025. 9. 26. 17:26
728x90

 

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

노란 격자(내부)의 가로·세로를 (w, h)라고 두고, 갈색 격자는 테두리 한 줄이므로 최종 카펫 크기는 (w+2, h+2)입니다.
조건은

  • w * h = yellow
  • (w+2) * (h+2) = brown + yellow

을 만족하는 (w, h)를 찾아 (w+2, h+2)를 반환

class Solution {
    // w * h = yellow일 때 (w+2)*(h+2) = brown+yellow
    public int[] solution(int brown, int yellow) {
        int[] answer = {};
        
        int total = brown+yellow;
        
        // yellow의 약수쌍 (h<=w)만 검사
        for(int h=1; h*h <= yellow; h++){
            if(yellow % h != 0) continue;
            
            int w = yellow / h;
            int W = w+2, H = h+2;
            
            if(W*H == total){
                // 요구사항 만족
                return new int[]{Math.max(W,H), Math.min(W, H)};
            }
            
        }
        
        // 답 없는 경우
        return new int[]{0,0};
    }
}