
내가 작성한 코드
class Solution {
public int solution(int[] wallet, int[] bill) {
int walletHeight = Math.min(wallet[0], wallet[1]);
int walletWidth = Math.max(wallet[0], wallet[1]);
int billHeight = Math.min(bill[0], bill[1]);
int billWidth = Math.max(bill[0], bill[1]);
int answer = 0;
while (true) {
// 조건 만족할 때까지 반복
if (walletHeight >= billHeight && walletWidth >= billWidth) {
break;
}
// 항상 더 긴 쪽을 반으로 접기
if (billHeight >= billWidth) {
billHeight /= 2;
} else {
billWidth /= 2;
// 너비가 항상 더 길어야 함 >> 너비가 높이보다 작아질 경우 각 변수 값 교환
if (billHeight > billWidth) {
int tmp = billHeight;
billHeight = billWidth;
billWidth = tmp;
}
}
answer++;
}
return answer;
}
}
다른 사람의 코드
class Solution {
public int solution(int[] wallet, int[] bill) {
int answer = 0;
while(max(wallet) < max(bill) || min(wallet) < min(bill)) {
bill[bill[0] > bill[1] ? 0 : 1] /= 2; // 둘중에 큰 쪽을 반으로 접기
answer++;
}
return answer;
}
// 각 값의 최대, 최소값을 구하는 메서드
private int max(int[] arr) {
return Math.max(arr[0], arr[1]);
}
private int min(int[] arr) {
return Math.min(arr[0], arr[1]);
}
}
Share article