https://school.programmers.co.kr/learn/courses/30/lessons/42842
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
# 코드
class Solution {
public int[] solution(int brown, int yellow) {
int size = brown + yellow; // 카펫의 면적 (총 격자 수)
for (int h = 3; h <= Math.sqrt(size); h++) {
if (size % h != 0) continue; // 나누어 떨어지지않으면 패스 (직사각형이니까)
int w = size / h; // 가로 길이
if ((w - 2) * (h - 2) == yellow) {
return new int[]{w, h};
}
}
return new int[]{0, 0}; // 예외 처리 (실제로 도달 X)
}
}
- 갈색 타일 수 계산식 : (가로 + 세로 - 2) * 2 = brown
- 노란색 타일 수 계산식 : (가로 - 2) * (세로 - 2) == yellow
- 갈색 타일 수 계산식을 코드에 사용하지 않은 이유는 두 조건 중 하나(여기서는 노란색 계산식 사용)만 만족해도 나머지 하나까지 자동으로 만족하기 때문이다.
- 또한 높이 h가 작은 수부터 시작하므로 w = size / h 로 인해 w는 자동으로 큰 수부터 체크가 된다. 따라서 w >= h 조건을 따로 확인할 필요도 없다.
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[프로그래머스: 정렬] K번째수 (1) | 2025.04.25 |
---|---|
[프로그래머스: 완전탐색] 피로도 (0) | 2025.04.25 |
[프로그래머스: 완전탐색] 소수 찾기 (0) | 2025.04.24 |
[프로그래머스: 완전탐색] 모의고사 (0) | 2025.04.24 |
[프로그래머스: 완전탐색] 최소직사각형 (0) | 2025.04.24 |