본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스/브루트 포스] 카펫

by weero 2020. 8. 28.

문제

https://programmers.co.kr/learn/courses/30/lessons/42842

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 ��

programmers.co.kr

 

코드

전체 격자의 수 = yellow 개수 + brown 개수

yellow의 가로 길이 = 전체 가로 길이 - 2 (좌우가 brown으로 한줄씩 쌓여있기 때문)

yellow의 세로 길이 = 전체 세로 길이 - 2 (위 아래가 brown으로 한줄씩 쌓여있기 때문)

 

for문의 i 범위는 3~√all

3 : yellow는 상하좌우 brown으로 한 줄씩 쌓여있다. yellow가 최소 1줄이라 했을 때 + 2로 설정했다.

√all : √all 를 기준으로 이미 짝이 있기 때문이다.

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int all = yellow+brown;
        
        for(int i=3; i<=(int)Math.sqrt(all); i++){ //세로
            if(all%i!=0)
                continue;
            else{
                int j=all/i; //가로
                if(yellow==(i-2)*(j-2) && brown==all-yellow){
                    answer[0]=j;
                    answer[1]=i;
                }
            }
        }
        
        return answer;
    }
}