728x90
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
Java
class Solution {
public int[] solution(int brown, int yellow) {
int total = brown + yellow;
for (int h = 3; h <= total / h; h++) {
int w = total / h;
if ((w - 2) * (h - 2) == yellow) {
return new int[] {w, h};
}
}
return null;
}
}
Tip.
왜 최소한 3부터 시작할까?
카펫은 가장자리 1줄이 갈색이고, 가운데가 노란색입니다. 그런데 만약 세로 길이가 2나 1이면, 가운데에 노란색 격자를 둘 공간이 없기 때문에 노란색 중앙 부분이 없어서 조건에 맞지 않습니다. 그래서 세로가 3 이상이어야 중앙에 노란색 격자가 생길 수 있습니다.
(w - 2) * (h - 2)의 의미
- w는 카펫의 가로 길이
- h는 카펫의 세로 길이
문제에서 갈색은 테두리에만 있고 노란색은 가운데에만 있고, 테두리를 제외하고 가운데 부분의 크기를 구하려면, 양쪽 테두리(좌우와 상하)가 각각 1칸씩 차지하니까, 테두리를 제외한 가운데의 가로는 w - 2, 가운데의 세로는 h - 2가 됩니다.
'Coding > Coding Test Bookmark' 카테고리의 다른 글
[Coding Test Bookmark]디스크 스케줄링(java, 프로그래머스) (0) | 2024.09.21 |
---|---|
[Coding Test Bookmark]다리를 지나는 트럭(java,프로그래머스) (0) | 2024.09.09 |
[Coding Test Bookmark]오픈채팅방(java,프로그래머스) (0) | 2024.09.09 |
[Coding Test Bookmark]더 맵게(java, 프로그래머스) (1) | 2024.09.07 |
[Coding Test Bookmark] 영어 끝말잇기(Java, 프로그래머스) (0) | 2024.09.05 |