99클럽 코테 스터디 9일차 TIL: 완전탐색

이주희·2024년 5월 28일
0

99클럽 코테 스터디

목록 보기
8/20
post-thumbnail

정렬 활용한 알고리즘 문제풀이

오늘 푼 문제: 카펫

입출력

  • 입력: Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어집니다.
  • 출력: 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return합니다.

예제 코드

class Solution {
    /**
     * 1. 한줄에 노란색 몇개씩 들어가는지 정한 후
     * 2. 가로 길이 = 한줄에 들어가는 노란색 개수 + 2/ 세로 길시 = 노란색이 들어가는 줄의 개수 + 2
     * 3. 가로길이가 새로길이보다 크거나 같을 때 가로 길이 * 새로 길이가 노란색과 갈색 격자의 수와 같을 때를 탐색
     */
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        for (int x = 1; x <= yellow; x++) {
            if (yellow % x != 0) continue;
            int w = x + 2;
            int h = (yellow / x) + 2;
            if (w >= h && brown + yellow == w * h) return new int[]{w, h};
        }
        return answer;
    }
}
  • 중심에만 노란색으로 채워지기 때문에 저는 중심 노란색이 한줄에 몇개가 들어가는 지를 먼저 정했습니다.
  • 그 후 심부의 노란색을 갈색으로 감쌌을 때 몇개가 되는지 확인해주었습니다.
  • 또한, 노란색을 감싸기 위해서는 가로의 길이 > 새로의 길이가 될 수 밖에 없기 때문에 해당 조건 또한 고려하였습니다.

회고

  • 처음에 노란색 바깥에는 갈색이 꼭 한줄이어야 하는가 하는 쓸데 없는 생각을 해서 고생 좀 했습니다.
  • 또 continue를 쓴다는게 break를 써놓고 한참을 고생했습니다. 저는 왜 당연히 제가 continue로 썼다고 생각했을까요?
profile
공릉동 감자

0개의 댓글