본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 카펫(Java)

by hxxyeoniii 2024. 10. 17.

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

 

프로그래머스

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

programmers.co.kr


문제 풀이

생각해야 할 점

1. 전체 타일의 수는 "노란색 타일 수 + 갈색 타일 수"와 같다.

2. 노란색 타일을 갈색 타일이 감쌀 수 있는 최소 가로와 세로의 수는 "3"이다.

3. 노란색 타일을 갈색 타일이 감싸려면 (가로 - 2) * (세로 - 2)가 노란색 타일의 수와 같아야 한다.

import java.util.*;

class Solution {
    
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        
        int w = 3; int h = 3; // 노란색 타일을 갈색 타일이 감쌀 수 있는 최소 가로, 세로 수 = 3
        int area = brown + yellow; // 전체 타일 수
        
        while(true) {
            
            // 직사각형을 만들 수 없음
            if(area % h != 0) {
                h++;
                continue;
            }
            
            w = area / h;
            int num = (w-2) * (h-2); // 노란색 타일의 수는 (가로-2) * (세로-2)와 같아야 함
            
            if(num == yellow) {
                answer[0] = w;
                answer[1] = h;
                break;
            } else {
                h++;
            }
        }
        return answer;
    }
}