[ BOJ / Python ] 1477번 휴게소 세우기

황승환·2021년 9월 3일
0

Python

목록 보기
3/498

앞서 C++로 풀어봤던 문제를 파이썬으로도 풀어보았다. 확실히 파이썬이 코드 길이는 짧게 나오는 것 같다.
[ BOJ / C++ ] 1477번 휴게소 세우기

  • 휴게소 위치 배열을 오름차순으로 정렬한다.
  • 휴게소 거리 배열 dis를 구한다.
  • 이분탐색 안에서 mid와 dis를 비교하여 dis가 mid보다 크고, dis가 mid로 나눠떨어진다면 cnt에 dis/mid-1을 더해주고, 나눠 떨어지지 않는다면 dis/mid를 cnt에 더해준다. 여기서 mid는 휴게소 간의 최대거리에 해당한다.
  • mid와 dis비교 후 cnt와 m을 비교하여 cnt가 더 크다면 front에 mid를, cnt가 더 작다면 back에 mid를 넣어준다.
  • back을 반환한다.

첫 제출에서 런타임에러가 발생했는데 그 이유는 C++의 /연산자와 파이썬의 /연산자가 다르다는 것을 까먹고 작성했기 때문이었다. C++:/ = python://

n,m,l=map(int, input().split())
point=list(map(int, input().split()))
point = sorted(point)
dis=[0]*(n+1)
dis[0]=point[0]
for i in range(1,n):
    dis[i]=point[i]-point[i-1]
dis[n]=l-point[n-1]
def BinarySearch():
        front=1
        back=l-1
        while front<back-1:
            mid=(front+back)//2
            cnt=0
            for i in dis:
                if i>mid:
                    if i%mid==0:
                        cnt+=i//mid-1
                    else:
                        cnt+=i//mid
            if cnt>m:
                front=mid
            else:
                back=mid
        return back
print(BinarySearch())

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글