문제
해결 방안 고민 + 해결 방법
•
제한사항을 확인한다.
◦
갈색 격자의 수 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
복사