[프로그래머스] 42842. 카펫
문제 링크
풀이 과정
주어진 갈색 격자의 수와 노란색 격자의 수를 가지고 만들어지는 배열의 가로, 세로 길이를 구하는 문제입니다.
먼저 문제에서 주어진 갈색 격자의 수와 노란색 격자의 수를 가지고 만들 수 있는 모든 배열의 모양을 뽑아 냅니다.
예를 들어, 입력 예에서 주어진 brown : 24, yellow : 24
를 가지고 생각해보면, 총 격자의 수는 24 + 24 = 48이 되고, 48개의 격자를 갖는 배열의 모양은 아래와 같습니다.
- 1 x 48
- 2 x 24
- 3 x 16
- 4 x 12
- 6 x 8
- 8 x 6
- 12 x 4
- 16 x 3
- 24 x 2
- 48 x 1
앞이 세로 길이, 뒤가 가로 길이라고 가정하면, 가로 길이가 세로 길이보다 같거나 길다
는 문제의 조건에 따라 다음 5 개의 경우는 제외됩니다.
8 x 612 x 416 x 324 x 248 x 1
또한, 노란색 격자를 감싸는 테두리
가 필요하려면 세로의 길이는 최소 3 이상
이어야 합니다. 따라서, 다음 두 개의 경우는 제외됩니다.
1 x 482 x 24
위와 같은 조건을 만족하는 모든 가능한 경우의 수를 가지고, 실제 노란색과 갈색 격자의 개수를 매칭시켜 올바른 배열의 크기를 구할 수 있습니다.
코드
public class Main {
public static int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int sum = brown + yellow;
int i = 3;
while (true) {
if (sum % i != 0) {
i++;
continue;
}
int column = i;
int row = sum / i;
if (column > row) break;
int b = (row + column) * 2 - 4;
int y = sum - b;
if (b == brown && y == yellow) {
answer[0] = row;
answer[1] = column;
break;
}
i++;
}
return answer;
}
public static void main(String[] args) {
// int brown = 10;
// int yellow = 2;
// int brown = 8;
// int yellow = 1;
int brown = 24;
int yellow = 24;
solution(brown, yellow);
}
}
댓글남기기