정렬 활용한 알고리즘 문제풀이
오늘 푼 문제: 카펫
입출력
- 입력: Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어집니다.
- 출력: 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return합니다.
예제 코드
class Solution {
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로 썼다고 생각했을까요?