[프로그래머스/Java] 카펫

Yujin·2025년 6월 18일

CodingTest

목록 보기
39/51

문제

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


접근 방법

  • 카펫의 전체 크기는 갈색 격자와 노란색 격자를 합친 수.
  • 가로와 세로 길이를 구할 때, 가로 ≥ 세로 조건을 만족해야 함
  • 테두리를 갈색으로 둘러싸고 내부를 노란색으로 채운 형태이므로, 전체 격자 수 - 테두리가 노란색 격자의 수와 일치해야 함
  • 가능한 가로, 세로 길이 조합 중에서 위 조건을 만족하는 값을 찾아 반환

나의 코드

class Solution {
    public int[] solution(int brown, int yellow) {
        // 답을 저장할 배열, answer[0]은 가로(width), answer[1]은 세로(height)
        int[] answer = new int[2];
        
        // i는 카펫의 세로 길이, 최소 3부터 시작 (최소 크기의 카펫은 3x3)
        for(int i = 3; i < brown + yellow; i++) {
            // 가로 길이 width는 전체 타일 수(brown + yellow)를 i로 나눈 몫
            int width = (brown + yellow) / i; 
            
            // 가로 길이는 세로 길이보다 크거나 같아야 하므로 이 조건을 확인
            if (width >= i) {
                // 테두리를 제외한 내부 영역의 크기가 노란색 타일 수와 같은지 확인
                // 즉, 카펫의 테두리(갈색 타일)를 제외한 내부가 정확히 노란색 타일로 채워졌는지 확인
                if ((i - 2) * (width - 2) == yellow) {
                    // 조건을 만족하면 answer 배열에 가로와 세로 값을 저장
                    answer[0] = width; // 가로
                    answer[1] = i;     // 세로
                    break;
                }
            }
        }
        return answer;
    }
}

0개의 댓글