프로그래머스 카펫 java

정상민·2023년 7월 14일

문제링크

문제 접근

  • Leo가 카펫 보고 온거니까 주어진 brown과 yellow로 사각형을 만들수 없는 경우는 없는듯
  • 가로 길이가 세로 길이보다 크거나 같으므로 세로 길이로 작은 값부터 완탐
  • brown이 yellow를 감싸야하므로 최소 sero값은 3
  • sero를 3부터 1씩 증가시키며 sum(brown + yello)을 나누어 떨어트릴 때 가능한지 체크
  • 입출력 예시를 종이에 그려보니 (가로 - 2) * (세로 - 2) = yellow 면 카펫의 크기
  • 최악의 경우 sum = 5,000 + 2,000,000 = 2,005,000
  • 이때 sero값이 절반이라고 하여도 백만번 정도 (시간 문제 없음)

코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int sum = brown + yellow;
        int garo = 0;
        int sero = 3;
        while(true){
            if(sum % sero == 0){
                garo = sum / sero;
                if((garo-2) * (sero-2) == yellow){
                    answer[0] = garo;
                    answer[1] = sero;
                    break;
                }
            }
            sero++;
        }
        return answer;
    }
}

결과

정리

  • 완전탐색 말고 다른 방법이 있을까 고민해봤지만 모르겠다
  • (brown과 yellow) 그리고 (가로와 세로)가 헷갈릴 수도 있겠다 라는 생각
profile
안녕하세요! 개인 공부를 꾸준히 기록하는 공간입니다.

0개의 댓글