문제 파악 및 재정의
n개의 버전이 주어지고 isBadVersion API가 제공된다.
첫 번째 불량 버전을 찾는 기능을 구현하며, API의 사용 횟수를 최소화 하라.
자료구조 및 알고리즘 선택
BinarySearch -> start와 end를 옮겨가며 mid의 위치를 조정하여 찾는 방식
구현
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int answer = 0;
int start = 0;
int mid = n/2;
int end = n;
if(n == 1) return 1;
// 탈출 조건
while(true) {
if(end == start) {
answer = start;
break;
}
if(isBadVersion(mid)) {
end = mid;
}else{
start = mid+1;
}
mid = (start + end) / 2;
}
return answer;
}
}
회고
못 품
BinarySearch 문제를 많이 다뤄 mid의 위치 조정하는 그림이 잘 그려지도록 해보자.
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int low = 0;
int high = n;
while(low<=high){
int mid = low + (high-low)/2;
if(isBadVersion(mid)==true && isBadVersion(mid-1)==false) return mid;
else if(isBadVersion(mid)==false ) low = mid+1;
else high= mid;
}
return -1;
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
2319. Check if Matrix Is X-Matrix (0) | 2023.03.07 |
---|---|
12. Integer to Roman (0) | 2023.03.07 |
35. Search Insert Position (0) | 2023.02.28 |
242. Valid Anagram (0) | 2023.02.26 |
task-scheduler-ii (2) | 2023.02.25 |