BAEKJOON 1654 랜선 자르기
BAEKJOON 1654 랜선 자르기
문제
https://www.acmicpc.net/problem/1654
풀이
이진 탐색을 하지 않으면 시간 초과를 피할 수 없는 문제이다. 주어진 N값과 동일 할 때까지 최대한 이진 탐색을 진행해서 mid 값을 출력하면 된다.
코드
import sys
sys.stdin = open('input.txt')
K, N = map(int,input().split())
arr = [int(input()) for _ in range(K)]
start = 1
end = max(arr)
while start <= end: # start가 end를 넘어서면 종료
mid = (start + end) // 2 # 가운데를 중심으로 양쪽 탐색
if sum(list(map(lambda n:n//mid, arr))) >= N: # 주어진 N과 값이 같거나 크면 start를 mind+1로 당겨옴
start = mid+1
else: # 그렇지 않다면 마지막 지점을 당겨옴
end = mid-1
mid = (start+end)//2
print(mid)
결과
처음에 문제를 풀었을 때는 이진 탐색 알고리즘에 대해 알지 못하여서 그리드한 방식으로 접근하였다. 그러다보니 숫자 커지면 탐색의 수가 너무 많아져서 시간 초과가 발생하였다. 후에 알고리즘에 대해 어느정도 공부한 후에는 이진 탐색 방법으로 접근을 하였고, 이때 아직 이진 탐색 구현에 대한 정확한 이해가 부족해서 처음에 틀리기도 했다.
아직도 완벽하게 이해한 것은 아니라고 생각이 들어 이진 탐색 알고리즘 문제를 몇 개 더 풀어보면 좋을 것 같다.
Author And Source
이 문제에 관하여(BAEKJOON 1654 랜선 자르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shawnk123/BAEKJOON-1654-랜선-자르기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)