Algorithm/프로그래머스

[Lv. 2] 카펫

녱녱 2023. 8. 8.

목차

[Lv. 2] 카펫

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

댓글