코딩테스트/자바 문제풀이

[프로그래머스: 완전탐색] 카펫

승요나라 2025. 4. 25. 00:54

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

 

프로그래머스

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

programmers.co.kr

 

# 코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int size = brown + yellow; // 카펫의 면적 (총 격자 수)
        
        for (int h = 3; h <= Math.sqrt(size); h++) {
            if (size % h != 0) continue; // 나누어 떨어지지않으면 패스 (직사각형이니까)
            
            int w = size / h; // 가로 길이
            if ((w - 2) * (h - 2) == yellow) {
                return new int[]{w, h};
            }
        }
        
        return new int[]{0, 0}; // 예외 처리 (실제로 도달 X)
    }
}
  • 갈색 타일 수 계산식 : (가로 + 세로 - 2) * 2 = brown
  • 노란색 타일 수 계산식 : (가로 - 2) * (세로 - 2) == yellow
    • 갈색 타일 수 계산식을 코드에 사용하지 않은 이유는 두 조건 중 하나(여기서는 노란색 계산식 사용)만 만족해도 나머지 하나까지 자동으로 만족하기 때문이다.
  • 또한 높이 h가 작은 수부터 시작하므로 w = size / h 로 인해 w는 자동으로 큰 수부터 체크가 된다. 따라서 w >= h 조건을 따로 확인할 필요도 없다.