[leetCode] 278. First Bad Version 풀이
2023. 1. 24. 17:35ㆍ알고리즘
278. First Bad Version
isBadVersion() API 함수가 주어짐 -> 오류가 있는 버전이면 True 반환
에러가 발생한 이후의 버전은 모두 에러 발생, 처음 에러가 발생한 버전을 찾아라
입력 값의 크기 : 1 <= bad <= n <= 2^31 - 1
이므로,
선형 탐색으로 for문을 통해 1 부터 n 까지 처음 에러 발생한 버전을 check 하면 시간초과 발생할 것 같다. : O(n) 의 복잡도
-> 이진 탐색하는 것이 탐색 시간을 줄일 수 있을 것
결과
# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):
class Solution(object):
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
# 이진 탐색 수행
left = 1
right = n
bad = -1
while left <= right:
mid = (left + right) // 2
if isBadVersion(mid):
# 이전 버전 체크
right = mid - 1
bad = mid
else:
left = mid + 1
return bad
이진 탐색을 통해 범위를 줄여 나갔다~~~~~
결과
Visual Code 테스트용 코드
# leetCode 278.First Bad Version
class Solution(object):
def __init__(self,bad):
self.bad = bad
def isBadVersion(self, version): # 임의로 내가 구현
if version >= self.bad:
return True
else:
return False
def firstBadVersion(self, n):
# 이진 탐색 수행
left = 1
right = n
bad = -1
while left <= right:
mid = (left + right) // 2
if self.isBadVersion(mid):
# 이전 버전 체크
right = mid - 1
bad = mid
else:
left = mid + 1
return bad
# 인스턴스 생성 시, 인자값을 첫번째 bad version 으로 설정
test1 = Solution(4)
test2 = Solution(1)
test3 = Solution(3)
print(test1.firstBadVersion(5)) # 4
print(test2.firstBadVersion(1)) # 1
print(test3.firstBadVersion(7)) # 3
'알고리즘' 카테고리의 다른 글
[Python] 백준 14889_스타트와 링크 (0) | 2023.02.10 |
---|---|
[Python] 프로그래머스 Lv2. 수식 최대화 (2) | 2023.02.01 |
[leetcode] Valid Palindrom (0) | 2023.01.24 |
[Python] 코딩테스트 연습 >2023 KAKAO BLIND RECRUITMENT > 개인정보 수집 유효기간 (0) | 2023.01.21 |
[Stack] leetCode 1944. Number of Visible People in a Queue 풀이 - Python (0) | 2022.08.15 |