랜선 자르기
생성일: 2022년 1월 14일 오후 5:27
구현 코드
# 랜선 자르기 (결정 알고리즘)
import sys
sys.stdin = open("input.txt", "rt")
k, n = map(int, input().split())
l = [int(input()) for _ in range(k)]
l.sort()
a = sum(l) // n
res = 0
while True:
for x in l:
res += x//a
if res < n:
a -= 1
res = 0
else:
break
print(a)
모범 답안
# 랜선 자르기
import sys
#sys.stdin = open("input.txt", "rt")
def Count(len):
cnt = 0
for x in l:
cnt += x//len
return cnt
k, n = map(int, input().split())
l = []
largest = 0
for _ in range(k):
tmp = int(input())
l.append(tmp)
largest = max(largest, tmp) # 가장 큰 수 찾기
lt = 1
rt = largest
while lt <= rt:
mid = (lt+rt)//2
if Count(mid) >= n:
res = mid
lt = mid + 1
else:
rt = mid - 1
print(res)
차이점
- 내가 구현한 코드는 입력 데이터가 많을때(k가 클 때) 실행 시간이 매우 길어진다.
- 반면 모범 답안에서는 Binary Search를 이용하여 범위를 절반으로 줄여가며 탐색을 하기 때문에 효율적이다.
- .txt 파일에서 숫자들을 불러와 리스트에 넣고, 해당 리스트를 정렬하여 가장 큰 수를 찾는 것 보다는 모범 답안처럼 .txt 파일에서 반복문으로 불러오는 과정에서 가장 큰 값을 갱신하며 찾는 것이 효율적이다.
Author And Source
이 문제에 관하여(랜선 자르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lsj8706/랜선-자르기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)