프로그래머스 - 카펫

이형석·2024년 6월 12일

알고리즘 Phase1

목록 보기
42/59

운이 좋았는지 풀이를 금방 떠올렸다.
바로 (brown+yellow)는 사각형의 넓이와 같으므로 즉, (가로x세로)와 같다는 것이다.
따라서 가로의 최댓값부터 가로의 최솟값까지 내려가면서, 그 사각형의 넓이에서 테두리를 제외한 값이 yellow의 크기와 같은지 검사하면 된다.
디테일은 코드 참고

import java.util.*;
class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        // 문제
        // brown은 바깥(테두리 1줄)
        // yellow는 안쪽
        // 더 긴 쪽, 짧은 쪽 순서로 return
        // 풀이
        // 1. brown으로 사각형을 만들어보고 yellow가 들어가는지
        // 2. 가로 x 세로 크기 = yellow + brown인 사각형 
        // 2번 채택
        // 2번에서 최대가로값((brown갯수-2)/2)부터 최대세로값(세로최댓값=가로최솟값)까지
        // --해가면서 가로의 최댓값 찾기, 그다음 세로값 구하기
        // if(?) 면 가로의 최댓값, ? -> 배열을 만들고, 테두리1칸 빼고의 숫자가 yellow갯수와 같으면 -> 배열만들필요없이, 그냥 넓이에서 가로, 세로 빼보기
        int dim = brown + yellow;
        //가로 최댓값
        int maxW = (brown-2)/2;
        //세로 최댓값 : 정사각형일때 세로길이 
        int minW = (brown-4)/4+2;
        for(int i = maxW; i >= minW; i--){
        	//현재 가로값
            int w = i;
            //현재 세로값
            int h = (brown-2*w)/2 + 2;
            //현재 테두리 칸 갯수
            int boundary = (w+h-2)*2;
            //현재 사각형 넓이 - 테두리칸 갯수 == yellow면 break;
            if(w*h - boundary == yellow){
                answer[0] = w;
                answer[1] = h;
                break;
            }
        }
        return answer;
    }
}
profile
금융IT 개발자

0개의 댓글