본문 바로가기

프로그래머스(Java)/Level 2

[프로그래머스] 카펫

728x90

풀이 힌트

  1. 문제 이해
    • 갈색 타일은 카펫의 테두리를 구성하고, 노란색 타일은 그 내부를 채웁니다.
    • 전체 타일 수는 갈색 타일과 노란색 타일의 합입니다.
  2. 전체 넓이 계산
    • 전체 타일 수는 brown + yellow입니다.
    • 이 값을 기준으로 카펫의 가로(w)와 세로(h)를 찾아야 합니다.
  3. 가로와 세로 길이의 조건
    • 카펫의 높이는 최소 3이어야 합니다. 이는 갈색 타일로 테두리를 두르기 위해 필요합니다.
    • h가 3부터 시작하여 하나씩 증가시키면서 전체 넓이(area)를 h로 나누어 떨어지는지 확인합니다. 이때 나누어 떨어지면 해당 값을 w로 설정합니다.
  4. 조건 검사
    • 계산한 w와 h가 테두리를 제외한 내부 노란색 타일의 넓이를 만족하는지 확인합니다.
    • 즉, (w - 2) * (h - 2)가 yellow와 같은지 확인합니다.
    • 조건을 만족하면 해당 w와 h 값을 반환합니다.

 

 


정답은 더보기 클릭

더보기
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] result = new int[2];
        
        // 카펫 전체 크기
        int area = brown + yellow;
        
        // 가로 세로 길이 초기 값
        // 세로가 3인 이유는 갈색 타일로 테두리를 두를려면 최소 3의 높이가 있어야 하기 때문
        int w;
        int h = 3;
        
        
        while (true) {
            // 만약 전체 넓이가 h로 나누어지지 않을 경우
            if (area % h != 0) {
                // 높이를 1 추가하고 다시 시작하기
                h++;
                continue;
            }
            
            // 가로 길이 구하기
            w = area / h;
            
            // 좌우상하 테두리를 뺀 값의 넓이가 노란색 타일의 수와 같은지 비교
            if ((w-2) * (h-2) == yellow) {
                return new int[] {w,h};
            }
            h++;
        }
        // 문제를 읽으면 아시겠지만 테두리 1줄은 갈색으로 이루어져있습니다
        // 즉 테두리를 제외한 넓이는 노란색 타일의 개수와 같습니다
        // 테두리를 제외한 넓이 (w-2) * (h-2)
    }
}
728x90