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

 

코딩테스트 연습 - 카펫

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

programmers.co.kr

노란색, 갈색으로 이뤄진 격자 모양의 카펫이 있다.

이 카펫의 노란색, 갈색 격자 개수가 주어질 때 카펫의 가로, 세로 크기를 배열에 담아 반환해야한다.

 

1. 카펫의 테두리는 모두 갈색 한 줄로 둘러싸여있고 나머지는 전부 노란색이다.

2. 가로 길이는 세로 길이와 같거다 더 길다.

3. 노란색 격자는 최소 1칸은 존재한다.

 

 

풀이 .

class Solution {
    public int[] solution(int brown, int yellow) {
        // b = 2w + 2h - 4
        //   -> w + h = (b + 4) / 2
        //   -> h < (b + 4) / 2
        // y = (w - 2) * (h - 2)

        int[] answer = new int[2];
        for(int h = 3; h < (brown + 4) / 2; h++) {  // y는 최소 1칸 -> h는 최소 3이상
            int w = (brown + 4) / 2 - h;
            if(yellow == (w - 2) * (h - 2)) {
                answer[0] = w;
                answer[1] = h;
                break;
            }
        }
        return answer;
    }
}

 

다른 블로그의 코드를 찾아보고 이해했다.

카펫의 형태를 유추하여 몇가지 식을 세울 수 있다.

가로는 세로보다 짧을 수 없다는 조건이 있기 때문에 h를 최소값부터 탐색하다 처음 나오는 w 값이 정답이 된다.

(w, h 값을 역전시키면 yellow에 대한 식은 맞지만 세로가 더 길어지므로 정답이 될 수 없음)

'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글

[PG] 조이스틱 JAVA  (0) 2021.01.02
[PG] 체육복 JAVA  (0) 2021.01.02
[PG] 소수 찾기 JAVA  (0) 2021.01.01
[PG] 모의고사 JAVA  (0) 2021.01.01
[PG] 가장 큰 수 JAVA  (0) 2020.12.31

+ Recent posts