내영잉 2023. 4. 4. 11:24

1. 문제 📚

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

2. 입출력 예 📋

3. 알고리즘 ✅

노란색의 개수에 따라서 갈색의 개수가 달라지기때문에 노란색의 개수가 우선이라고 생각했다! 

조건에서 가로의 개수가 더 길다고 나와있었으므로 조건절에 넣어서 노란색의 격자를 구해줬다.

1. 노란색 가로 세로 구하기 

2. 갈색 가로 세로는 각각 노란색가로 + 2 노란색세로 +2 이다.

3. 갈색 가로 * 갈색 세로가 파라미터로 주어진 노란색 + 갈색 과 같은지 체크 (중요)

4. 소스코드 💻

import java.util.*;
class Solution {
    static int width, height;
    
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        
        // 1. 노란 격자 부터 구하기
        int yellowWidth = yellow;
        int yellowHeight = 1;
        for (int i = 1; i <= yellow; i++) {
            if (yellow % i != 0) continue;
            
            int tempHeight = i;
            int tempWidth = yellow / tempHeight;

            // 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
            if (tempWidth >= tempHeight) {
                if ((tempWidth + 2) * (tempHeight + 2) != (brown + yellow)) continue;
                yellowWidth = tempWidth;
                yellowHeight = tempHeight;
            } 
        }
        
        answer[0] = yellowWidth + 2;
        answer[1] = yellowHeight + 2;
        
        return answer;
    }
}

굿