본문 바로가기

알고리즘

백준1654)랜선 자르기-python

 

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

 

n,m = map(int,input().split())

arr = []
for _ in range(n):
  a = int(input())
  arr.append(a)


start = 1
end = max(arr)


while start <= end:
  mid = (start + end) // 2

  line = 0
  for i in arr:
    if i >= mid:
      line += i // mid

  if line < m:
    end = mid - 1
  else:
    start = mid + 1

print(end)

사실 문제는 간단하다.

start는 1,

end는 max값으로 설정한 다음

while문으로 진입한다.

 

while문에선 start와 end의 중간값을 구하고 그 중간값으로 선들을 잘라 개수를 구한다.

만일 개수가 적을 경우 end = mid -1

개수가 만들경우 start = mid + 1

만일 개수가 같더라도, start는 계속 갱신되므로 end은 정답으로 고정된다.

 

'알고리즘' 카테고리의 다른 글

백준4963)섬의 개수-python  (0) 2023.02.07
백준10815)숫자카드-pyhton  (0) 2023.02.06
백준)숫자카드-python  (0) 2023.02.06
*프로그래머스)카펫-python  (0) 2023.02.05
*프로그래머스)뒤에 있는 큰 수 찾기-python  (0) 2023.02.04