https://school.programmers.co.kr/learn/courses/30/lessons/42842?language=java(프로그래머스)
완전탐색
ex) 12 라면 [1,12] , [2,6] , [3,4] , [4,3] , [6,2][12,1]
ex) brown 가로 4 , 세로 3 이면 yellow는 가로 2 , 세로 1
ex)
brown 의 가로x세로 = 12
yellow의 가로x세로 = 2
둘을 빼면 10이 되고, 이는 yellow를 제외한 brown의 색 개수인 10과 동일함
import java.util.ArrayList;
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = {};
ArrayList<Integer[]> cases = resultCandidates(brown+yellow); //가로 세로 길이 경우의 수가 들어있음
for(int i = 0 ; i<cases.size() ; i++) {
int brownHorizontal = cases.get(i)[0];
int brownVertical = cases.get(i)[1] ;
int yellowHorizontal = brownHorizontal-2;
int yellowVertical = brownVertical-2 ;
if(brownHorizontal * brownVertical - yellowHorizontal * yellowVertical == brown) {
return new int[]{ brownHorizontal , brownVertical } ;
}
}
return answer;
}
public ArrayList<Integer[]> resultCandidates(int num) {
ArrayList<Integer[]> tmp = new ArrayList<>();
int divisor = 1;
while(divisor <= num) {
if(num/divisor < divisor) break;
if(num % divisor == 0) {
tmp.add(new Integer[]{num/divisor , divisor });
}
divisor++;
}
return tmp;
}
}
(1) resultCandidates 메서드로 가로x세로가 가능한 경우의 수를 찾는다.
이때 brown이 yellow보다 가로가 같거나 더 길기때문에 [3,4] 같은 순서부터는
break를 걸었다.
ex) 12 => [12,1][6,2] [4,3] // brown 가로개수 , brown 새로 개수
(2) 모든 경우의 수를 돌리며 ####시도방법 에서 설명한 수학적 지식을 이용해
일치하는 경우를 리턴한다.
없음
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL