목차
현수는 이사를 하려고 합니다.
이삿짐 센터에는 여러 개의 트럭이 있습니다. 각 트럭은 짐을 실을 수 있는 총 무게 제한이 있 습니다.
이사 비용은 현수가 선택한 트럭의 무게 제한에 곱하기 10을 한 값입니다.
nums에 각 트럭의 무게 제한이 오름차순으로 주어지고, 현수의 이사하는 짐의 총 무게가 weight주어지면 현수가 짐을 실을 수 있는 최소비용의 트럭을 찾아 선택된 트럭의 인덱스 번 호를 반환하는 프로그램을 작성하세요.
인덱스 번호는 0번부터 시작합니다.
현수가 이사할 수 있는 트럭이 존재하지 않을 경우 -1를 반환합니다.
제한사항:
• nums의 길이는 100,000,000을 넘지 않습니다. nums의 원소는 유일값입니다.
• 1 <= nums[i] <= 100,000,000
나의 코드
def solution(nums, weight):
answer = 0
left=0
right=len(nums)
while left<right:
mid=(left+right)//2
if weight<=nums[mid]:
right=mid
elif weight>nums[mid]:
left=mid+1
if nums[-1]<weight:
answer=-1
else:
answer=right
return answer
print(solution([100, 120, 150, 160, 165, 170, 175, 180, 190, 200], 170))
print(solution([200, 250, 260, 265, 275, 290, 300, 325, 350, 370], 270))
print(solution([50, 55, 60, 65, 70, 80, 80, 80, 80, 90, 90, 90], 80))
print(solution([20, 30, 40, 50, 60, 70], 90))
print(solution([10, 30, 50, 70, 80, 90, 100, 110, 120], 115))
큰 어려움 없이 직관적으로 이진탐색 문제임을 알수 있었고 무난히 작성완료
정답코드
def solution(nums, weight):
left = 0
right = len(nums)
while left < right:
mid = (left + right) // 2
if weight > nums[mid]:
left = mid + 1
else:
right = mid
return -1 if right == len(nums) else right
print(solution([100, 120, 150, 160, 165, 170, 175, 180, 190, 200], 170))
print(solution([200, 250, 260, 265, 275, 290, 300, 325, 350, 370], 270))
print(solution([50, 55, 60, 65, 70, 80, 80, 80, 80, 90, 90, 90], 80))
print(solution([20, 30, 40, 50, 60, 70], 90))
print(solution([10, 30, 50, 70, 80, 90, 100, 110, 120], 115))
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[스택] - 올바른 괄호 (0) | 2024.01.23 |
---|---|
[이진탐색] -고정된 숫자 (0) | 2024.01.23 |
이진탐색 (0) | 2024.01.23 |
[그리디] -카드 점수 (0) | 2024.01.23 |
[다시보기] [그리디] - 선긋기 (0) | 2024.01.23 |