어제의 나보다 성장한 오늘의 나

[프로그래머스][Level2][Java] 카펫 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][Level2][Java] 카펫

NineOne 2020. 12. 25. 23:41

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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

문제풀이

막상 풀려고 했는데 생각이 바로 안 났다. 어떻게 하면 간단하게 풀수 있을까? 생각하게 되었고

갈색은 문제상에 가장자리만 차지 한다고 했으니 가장자리만 검사하면 되겠구나!

그래서 이중 반복문으로 가로, 세로를 비교 하면서(세로가 가로보다 같거나 작아야 되니간 j<=i 까지 해주었다.

mapSize는 결국 갈색과 노란색의 합이니깐 조건에 맞을때 까지 찾았다.

또한 가장자리를 검사할때는 가로길이x2 , 세로길이x2 에다가 겹치는 부분이 꼭짓점 4곳이라 -4를 해주었다.

갈색값과 같다면 저장하고 return 해주었다.

 

코드

class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int mapSize = brown+yellow;
        
        loop:
        for(int i=3; i<=brown; i++){ // 가로
            for(int j=3; j<=i; j++){   // 세로
                if(i*j != mapSize) continue;
                
                // 가장자리 검사
                int a = (i*2) + (j*2) -4; // 겹치는 부분 가장자리 4개
                if( a == brown) {
                    answer[0] = i;
                    answer[1] = j;
                    break loop;
                }
            }
        }
        
        return answer;
    }
}
Comments