✔ 카펫
문제 분석하기
brown의 가로 길이는 yellow의 가로 길이보다 2만큼 크고
brown의 세로 길이는 yellow의 세로 길이보다 2만큼 크므로
brown과 yellow의 합에 대해 약수를 구한 후, 약수의 짝에서 각 -2씩을 하여 곱한 값이 yellow의 갯수와 같은지 확인
예1) brown = 10, yellow = 2
b | b | b | b |
b | y | y | b |
b | b | b | b |
예2) brown = 8, yellow = 1
b | b | b |
b | y | b |
b | b | b |
손으로 풀어보기
- brown과 yellow의 합에 대한 약수 구하기
- 구한 약수의 짝에서 각 -2씩을 하여 곱한 값이 yellow의 갯수와 같은지 확인
- 가로, 세로 길이 반환
슈도코드 작성하기
brown(갈색 격자의 수)
yellow(노란색 격자의 수)
all(격자의 전체 수) = brown + yellow
width(가로 길이)
height(세로 길이)
for(i->i는 3부터 all만큼) {
if(all % i == 0) {
height = i
width = all / i
if ((height - 2) * (width - 2) == yellow) {
break;
}
}
}
answer에 height와 width 저장하여 반환
코드 구현하기
/**
* 42842) 카펫
*/
public class K004_42842 {
// brown(갈색 격자의 수)
// yellow(노란색 격자의 수)
public int[] solution(int brown, int yellow) {
// all(격자의 전체 수) = brown + yellow
int all = brown + yellow;
// width(가로 길이), height(세로 길이)
int width = 0, height = 0;
for (int i = 3; i < all; i++) {
// 약수일 경우
if (all % i == 0) {
height = i;
width = all / i;
// 구한 약수의 짝에서 각 -2씩을 하여 곱한 값이 yellow의 갯수와 같은지 확인
if ((height - 2) * (width - 2) == yellow) {
break;
}
}
}
// answer에 height와 width 저장하여 반환
int[] answer = new int[2];
answer[0] = width;
answer[1] = height;
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
K004_42842 solution = new K004_42842();
int brown = 10;
int yellow = 2;
int[] result = solution.solution(brown, yellow);
System.out.println(Arrays.toString(result));
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[86971] 전력망을 둘로 나누기 (0) | 2023.12.01 |
---|---|
[87946] 피로도 (0) | 2023.11.30 |
[42584] 주식가격 (0) | 2023.11.28 |
[42583] 다리를 지나는 트럭 (0) | 2023.11.28 |
[42587] 프로세스 (0) | 2023.11.27 |