![[Lv. 2] 카펫 [Lv. 2] 카펫](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
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 (귀퉁이)를 하면 노란타일이 될 때 문제에서 원하는 답이 됨!
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Lv. 1] 바탕화면 정리 (0) | 2023.08.20 |
---|---|
[Lv. 1] 신규 아이디 추천 (0) | 2023.08.20 |
[Lv. 1] 달리기 경주 (0) | 2023.08.08 |
[Lv. 1] 체육복 (0) | 2023.08.08 |
[Lv. 2] 영어 끝말잇기 (0) | 2023.07.30 |
댓글