Java/Coding Test
카펫 문제 풀이
최고다최코딩
2023. 10. 6. 09:51
728x90
중앙은 노란색으로 칠해져있고 테두리 한줄만 갈색으로 칠해져있다.
갈색 타일의 개수와 노란색 타일의 개수가 주어질 때 가로 >=세로의 길이를 배열로 반환
각 타일의 정사각형 넓이 1이므로 갈색과 노란색 타일의 합은 전체 직사각형의 넓이가 나온다.
직사각형의 넓이는 가로*세로 이므로
brown+yellow = answer[0]*answer[1] 과 같다.
yellow는 중앙의 직사각형이므로 yellow의 가로 세로 길이는 yellow의 약수이다.
곱하여 yellow가 되는 두 약수에 각각 가로, 세로 1씩 총 2를 더한 값이 전체 크기의 가로와 세로이다.
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
//brown+yellow = return[0]*return[1]
//yellow의 약수 (2,1)이라하면 약수 세트 가로와 세로에 각각 2씩 더한 값이 리턴
for(int i=1; i*i<=yellow;i++){
if(yellow%i==0){
int r = i;
int l = yellow/i;
if((r+2)*(l+2)==brown+yellow){
answer[0] = Math.max(r+2,l+2);
answer[1] = Math.min(r+2,l+2);
return answer;
}
}
}
return answer;
}