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;

}