velog 버그 때문에 다시 올립니다.
코딩테스트 연습 > 완전탐색 > 카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842
격자 모양 카펫이 있다. 이 카펫에는 중앙에는 yellow, 테두리에는 brown로 칠해져있다. yellow의 갯수와 brown 갯수가 주어질 때, 카펫의 가로,세로를 배열로 return 하라

가로는 세로보다 같거나 길다.
brown과 yellow의 합은 전체 카펫의 넓이(총 갯수, total)이다.
for문을 이용하여 i(가로)를 기준으로 점차 줄여가면서 total를 i로 나눴을 때, 0이 되는 i를 찾는다.
yellow는 (가로 - 2) X (세로 - 2) 이므로
yellow == (i - 2) * (total/i - 2)가 되는 i를 구한다.
이후 answer 배열에 가로는 i, 세로는 total/i를 넣어서 answer을 return한다.
% for문의 i는 시작을 total에서 점차 줄여가므로 가로가 세로보다 길다.
class Solution {
public int[] solution(int brown, int yellow) {
int total = brown + yellow;
int w = 0;
int h = 0;
int[] answer = new int[2];
for(int i = total; i>2; i--){
if(total % i != 0) continue;
else{
if(yellow == (i-2) * (total/(i)-2)){
w = i;
h = total/i;
answer[0] = w;
answer[1] = h;
return answer;
}
}
}
return answer;
}
}
Review
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = {0,0};
int total= brown + yellow;
for(int i = total; i>2; i--){
if((i-2) * ((total/i)-2) == yellow){
return new int[] {i,total/i};
}
}
return answer;
}
}
어렵지 않은 문제였다. 처음에 "어떻게 노란색, 갈색 갯수만으로 어떻게 가로, 세로를 구하지?" 란 의문이 있었으나. 문제 처음 시작에 중앙은 노란색, 테두리는 갈색 이라는 문구를 보고 풀었다.


Review
