갈색격자의 수가 brown, 노란격자의 수가 yellow 일때 카펫의 면적은 brown + yellow 이고
면적의 약수가 카펫의 가로,세로 길이가 된다.
brown :10, yellow : 2 => 면적 : 12, 카펫가로 세로 후보군은 [1,12], [2,6], [3,4], [4,3], [6,2], [12, 1]
카펫에 노란격자는 무조건 1이상이고, 가로가 세로보다 길거나 같다는 조건이 있으므로 가능한 후보군은
[4,3] 하나뿐이다. (최소 가로/세로 길이는 3)
전체 면적까지 루프를 역순으로 돌리고, (가로-2) * (세로-2) = 노란격자의 수가 나오는 경우의 수를 찾는 문제
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int size = brown + yellow;
for (int i = (int) Math.ceil(size/2); i >= 3; i--) {
int yak1 = i;
int yak2 = size/i;
if((yak1-2) * (yak2-2) == yellow) {
answer[0] = yak1;
answer[1] = yak2;
break;
}
}
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습,
https://programmers.co.kr/learn/challenges
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (깊이/너비 우선 탐색) 네트워크 (0) | 2021.03.29 |
---|---|
[프로그래머스] (깊이/너비 우선 탐색) 타겟 넘버 (0) | 2021.03.28 |
[프로그래머스] (완전탐색) 소수 찾기 (0) | 2021.03.27 |
[프로그래머스] (완전탐색) 모의고사 (0) | 2021.03.25 |
[프로그래머스] (정렬) H-Index (0) | 2021.03.25 |
댓글