본문 바로가기
📖 Algorithm/코딩테스트

2022.05.16 「Lv.2 카펫」

by GroovyArea 2022. 5. 16.
오늘은 프로그래머스에서 완전 탐색 문제 중 레벨 2의 카펫 문제를 풀며 정리를 해보겠다.
항상 느끼는 거지만 자료구조에 대해 정리 좀 해야겠다. 
풀 순 있는 문제라도 자료구조에 대한 개념을 이용해 푸는 것과 내 방식대로 푸는 것은 나중에 큰 차이가 있을 것이 분명하므로 오늘이나 이번 주 안에 무조건 정리하는 것으로 하자!

 

문제 설명

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

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

 

풀이 과정

(가로 개수 - 2) x (세로 개수 -2) = 노란색 격자 

가로의 길이 >= 세로의 길이

 

이것이 핵심이므로 전체 격자의 개수를 아는 것이 중요할 것이다.

전체 격자의 개수는 brown + yellow 

위의 조건들을 제어문으로 작성하면 해결될 것이다.

 

public class Carpet {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];

        int totalTiles = brown + yellow;

        for (int i = 1; i <= totalTiles; i++) {
            int width = i;
            int height = totalTiles / i;

            if (width < height) {
                continue;
            }

            if ((width - 2) * (height - 2) == yellow) {
                answer[0] = width;
                answer[1] = height;
            }
        }

        return answer;
    }
}

가로 개수와 세로 개수를 구하고,

조건문으로 continue를 통해 규칙에 위반한 경우를 날렸고,

노란색 격자 수와 같아질 때의 조건이 가로 세로 길이이므로 정답을 반환했다.

 

결론

Lv2 문제치고 쉬운 편이었다. 하지만 더 다양하게, 효율적이게 풀어보려고 항상 노력해야겠다!

반응형

'📖 Algorithm > 코딩테스트' 카테고리의 다른 글

2022.05.24 「Lv.3 입국심사」  (0) 2022.05.24
2022.05.18 「Lv.2 Heap 더 맵게」  (0) 2022.05.18
2022.05.17 「Lv.2 프린터」  (0) 2022.05.17
2022.05.12 「LV2 소수 찾기」  (0) 2022.05.12
2022.05.09 「해시 Lv.2」  (0) 2022.05.09