728x90
#1654번 랜선 자르기 https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
이분탐색이란 눈치를 채고 바로 풀었다
틀린코드
K, N = map(int, input().split())
lans = [int(input()) for _ in range(K)]
start = 1
end = min(lans)
while start <= end:
mid = (start + end)//2
pivot = sum(map(lambda x: x//mid, lans))
if pivot == N:
print(mid)
break
elif pivot > N:
start = mid + 1
elif pivot < N:
end = mid - 1
바로 틀리길래 뭘 잘못했나 싶었다.
문제점
1. end 초깃값을 최솟값으로 설정했다. 최댓값으로 설정해야 빠짐없이 탐색할 수 있다.
2. 이진탐색 내부에서의 논리문제였는데, 위의 형태에서는 답이 출력되지 않는 경우가 생긴다.
때문에 if문의 구조를 변경해야한다.
정답코드
K, N = map(int, input().split())
lans = [int(input()) for _ in range(K)]
start = 1
end = max(lans)
while start <= end:
mid = (start + end)//2
pivot = sum(map(lambda x: x//mid, lans))
if pivot >= N:
start = mid + 1
elif pivot < N:
end = mid - 1
print(end)
'Algorithm > acmicpc.net' 카테고리의 다른 글
아이디어 is null.. (실버2) (0) | 2022.02.25 |
---|---|
실버 돌아보길 잘했지... 안녕 괄호야 (실버4) (0) | 2022.02.25 |
파이썬 시간초과의 늪..(골드3) (0) | 2022.02.24 |
골드2... 판단미스 (0) | 2022.02.23 |
골드가 익숙해지지 않아.. (골드4) (0) | 2022.02.22 |