Backend
home
👐🏻

[프로그래머스] 카펫

생성일
2025/05/20 10:19
태그
Programmers
게시일
2025/05/20
최종 편집 일시
2025/05/20 10:27

문제

해결 방안 고민 + 해결 방법

제한사항을 확인한다.
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
제한사항을 통해 알 수 있는 사실은 직사각형의 크기가 무조건 9이상은 되어야 한다는 것이다.
즉, 세로는 무조건 3 이상이어야 한다.
갈색 격자와 노란색 격자를 더한 값(total = row + col)에 최소 세로 길이를 나누면 4가 나온다는 점에 착안하여 문제를 접근하기로 하였다.
반복문을 활용하여 col과, row의 경우의 수를 따진다.
row의 길이가 3 이하면 pass 한다.
가로 길이가 세로 길이와 같거나 큰 경우 현재 가로 길이와 세로 길이가 노란색 격자로 이루어진 사각형의 넓이와 동일하다면 answer 배열에 row와 col을 추가한 다음 빠져나온다.

코드

package algo250520; // 프로그래머스 - 카펫 (Lv2) public class Pro42842 { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int total = brown + yellow; // yellow 가 존재하려면 가로와 세로의 길이가 3 이상이어야 한다 for (int i = 3; i <= total; i++) { int col = i; // 세로 int row = total / col; // 가로 // 가로의 갯수가 3 이하일 경우 if (row < 3) { continue; } // 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 길다. if (row >= col) { if ((row - 2) * (col - 2) == yellow) { answer[0] = row; answer[1] = col; break; } } } return answer; } }
Java
복사