오늘은 프로그래머스에서 완전 탐색 문제 중 레벨 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 |