[프로그래머스LV2 : 카펫]

Boknami·2023년 10월 7일

프로그래머스

목록 보기
19/29

풀이시간 : 25분

처음에 문제를 풀려고 할 때 그림에 조금 집중하다가 아예 수학적으로 풀어보자는 생각을 했다.

이 부분에서 뭔가 규칙 같은 게 보였기 때문이다.

일단 브라운+노랑 = 가로*세로가 보였고,
직접 그림을 그려보니 안에 들어가는 노랑은 (가로-2)(세로-2)에 규칙을 띄고 있는 것 같았다.

시간복잡도 줄이기

무작정 i,j를 통해서 찾으니 효율성 부분에서 오답이 나와서 max/2를 넣어봤는데 그래도 오답이 떴다.

그래서 고민을 하다가 애초에 유망성이 없다면 바로 break를 통해서 나오는 게 어떨까 싶어서 넣어봤는데 다행히 성공적이었따!

💻 성공코드

class Solution {
    //테두리는 갈색인데 안에 든 건 노란색!
    //b + y = 가로*세로
    //y = (가로-2)*(세로-2)
    
    //12 = ? * ?
    //2 = (가로-2) * (세로-2)
    public int[] solution(int brown, int yellow) {
        int[] answer = {0,0};
        int max= brown+yellow;
        for(int i = max/2; i > 1; i--){//6~1, 12~
            for(int j = 1; j <= max/2; j++){//1~6
                if(i * j > max){
                    break;
                }
                
                if(i*j == max && (i-2)*(j-2) == yellow){
                    answer[0] = i;
                    answer[1] = j;
                    return answer;
                }
            }
        }
        return answer;
    }
}

0개의 댓글