728x90
풀이 힌트
- 문제 이해
- 갈색 타일은 카펫의 테두리를 구성하고, 노란색 타일은 그 내부를 채웁니다.
- 전체 타일 수는 갈색 타일과 노란색 타일의 합입니다.
- 전체 넓이 계산
- 전체 타일 수는 brown + yellow입니다.
- 이 값을 기준으로 카펫의 가로(w)와 세로(h)를 찾아야 합니다.
- 가로와 세로 길이의 조건
- 카펫의 높이는 최소 3이어야 합니다. 이는 갈색 타일로 테두리를 두르기 위해 필요합니다.
- h가 3부터 시작하여 하나씩 증가시키면서 전체 넓이(area)를 h로 나누어 떨어지는지 확인합니다. 이때 나누어 떨어지면 해당 값을 w로 설정합니다.
- 조건 검사
- 계산한 w와 h가 테두리를 제외한 내부 노란색 타일의 넓이를 만족하는지 확인합니다.
- 즉, (w - 2) * (h - 2)가 yellow와 같은지 확인합니다.
- 조건을 만족하면 해당 w와 h 값을 반환합니다.
정답은 더보기 클릭
더보기
class Solution {
public int[] solution(int brown, int yellow) {
int[] result = new int[2];
// 카펫 전체 크기
int area = brown + yellow;
// 가로 세로 길이 초기 값
// 세로가 3인 이유는 갈색 타일로 테두리를 두를려면 최소 3의 높이가 있어야 하기 때문
int w;
int h = 3;
while (true) {
// 만약 전체 넓이가 h로 나누어지지 않을 경우
if (area % h != 0) {
// 높이를 1 추가하고 다시 시작하기
h++;
continue;
}
// 가로 길이 구하기
w = area / h;
// 좌우상하 테두리를 뺀 값의 넓이가 노란색 타일의 수와 같은지 비교
if ((w-2) * (h-2) == yellow) {
return new int[] {w,h};
}
h++;
}
// 문제를 읽으면 아시겠지만 테두리 1줄은 갈색으로 이루어져있습니다
// 즉 테두리를 제외한 넓이는 노란색 타일의 개수와 같습니다
// 테두리를 제외한 넓이 (w-2) * (h-2)
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] N개의 최소공배수 (0) | 2024.06.29 |
---|---|
[프로그래머스] 영어 끝말잇기 (0) | 2024.06.27 |
[프로그래머스] 올바른 괄호 (0) | 2024.06.26 |
[프로그래머스] 최댓값과 최솟값 (0) | 2024.06.26 |
[프로그래머스] 구명보트 (0) | 2024.06.26 |