문제
입출력
문제풀이
import java.util.*;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
// x*2+y*2=brown+4;
// (x-2)*(y-2)=yello;
// xy-2*x-2*y+4=yello;
// xy=yello+brown;
int k = yellow + brown;
int j = 0;
for(int i = 1 ; i <= Math.sqrt(k);i++){
if(k%i==0){
j = k/i;
if(i*2+j*2-4==brown){
answer[0]=j;
answer[1]=i;
}
}
}
return answer;
}
}
※ 내 생각
이 문제는 완전 탐색을 이용하는 문제입니다.
// x*2+y*2=brown+4;
// (x-2)*(y-2)=yellow;
아래 식을 풀면 xy -2*x-2*y+4=yellow;이고
위 식을 대입하여 정리하면 xy = brown + yellow가 됩니다.
for 문의 범위는 가로길이가 세로길이 보다 크고
둘다 xy의 약수 이기 때문에
제곱근의 범위를 돌리면 중복되지 않고 해결할 수 있습니다.
테스트 결과
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 행렬 테두리 회전하기 ( 자바) / 구현 (0) | 2021.10.16 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위(자바) / 구현 (0) | 2021.10.15 |
[프로그래머스] 이중 우선 순위 큐(자바) / 힙 (0) | 2021.10.01 |
[프로그래머스] 디스크 컨트롤러(자바) /Heap (0) | 2021.09.27 |
[프로그래머스] 더 맵게 (자바) / 힙 (0) | 2021.09.16 |