Algorithm/프로그래머스
[Lv. 2] 카펫
녱녱
2023. 8. 8. 12:09
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int w = 0; int h = 0;
if(yellow == 1){
answer[0] = 3;
answer[1] = 3;
}else{
int temp = brown - 4;
temp /= 2;
for(int i = 1; i <= temp; i++){
if(i * (temp-i) == yellow){
if(i < temp - i) w = temp - i;
h = i;
break;
}
}
answer[0] = w + 2;
answer[1] = h + 2;
}
return answer;
}
}
처음엔 갈색 블럭 - 4 (귀퉁이 제거) -> 앞에서 구한 값 /2 해서 가로+세로 타일 개수 구하기 -> yellow 타일 개수 가능한 N*M 조합을 찾는 방식으로 풀었는데 얘의 단점은 가로로 긴 경우에 구멍이 난다는 것...!
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int sum = brown + yellow;
for(int i = 1; i<= sum; i++){
int row = i;
int col = sum / row;
if(row > col) continue;
if((row -2) * (col - 2) == yellow){
answer[0] = col;
answer[1] = row;
break;
}
}
return answer;
}
}
그래서 우선 타일의 총 합을 구하고 노란 타일이 가로로 긴 경우를 생각해서 sum까지 반복문을 돌린다!
제한 조건에 "가로 > 세로"가 있으므로 "세로>가로"의 경우엔 continue 시키기
가로, 세로 -2 (귀퉁이)를 하면 노란타일이 될 때 문제에서 원하는 답이 됨!