https://youtu.be/dklNjszX82s?si=0asCkZrNHFyiyTxF
수민(SUMIN)의 설탕분수 (Prod.Pomrad)을 들으며 풀다.
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42842
테두리: 갈색, 중앙: 노란색인 격자 모양 카펫.
갈색, 노란색의 격자 개수가 주어질 때, 카펫 가로, 세로 크기 return.
풀이
brown | yellow | return |
---|---|---|
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
입출력 예를 보면, 일정한 패턴을 구할 수 있다.
카펫 가로, 세로 크기에서 -2 한 값의 곱한 값(넓이)는 노란색의 격자 개수이다.
따라서 brown 즉, 갈색 격자 수의 절반값부터 줄여가면서, 완전탐색을 진행한다.
가령, 입출력 예 1의 경우를 보면, brown: 10의 절반인 5,5부터 줄여가면서 가로-2, 세로-2 한 값의 곱한 값이 노란색의 격자 개수와 일치하는 값일 반환한다.
또한, 구한값이 (가로*2)+(세로-2)*2
가 brown과 일치하는지 확인한다.
세로-2
하는 이유는, 가로에서 이미 더했기 때문에 중복을 제거해준다.
가령, #입출력3
을 보게되면 12부터 줄여나간다면 해당 조건이 없다면 [10, 5]가 return되게 된다. 하지만 10*2 + (5-2)*2 = 16
이므로 정답이 아니다. 따라서 건너뛰고 [8,6]인 (8 * 2)+(6-2)*2= 24
이 return 되도록!
정답코드
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int mid = brown/2;
int flag = 0;
for(int i=mid; i>0; i--){
for(int j=mid-1; j>0; j--){
if((i-2)*(j-2)==yellow && (i*2)+(j-2)*2==brown ) {
answer[0]=i;
answer[1]=j;
flag= 1;
break;
}
}
if(flag==1){
break;
}
}
return answer;
}
}