![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGd6Xa%2FbtrqkThSRSc%2FZUvOXfXky1dXz1FDJKfdzk%2Fimg.png)
[백준]2343(파이썬) - 기타레슨
resilient
·2022. 1. 10. 22:52
728x90
반응형
https://www.acmicpc.net/problem/2343
2343번: 기타 레슨
강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경
www.acmicpc.net
- 이 문제는 정말 어이없는 실수로 꽤나 시간을 쏟았던 문제입니다.. 해설을 하면서 말씀드리도록 하죠.
- 처음 봤을 때 생각은 '뭔가 기준점이 있어야 하고 그 기준점은 조건에 따라 달라질 수 있다.... 그렇다면 이분 탐색이겠구나'였습니다.
- 이분 탐색에서 가장 핵심은 이분탐색풀이에서의 mid 값을 뭐로 설정하느냐? 라고 저번 이분탐색 포스팅에서 언급한적이 있는데요,
이번에도 무엇을 mid로 둘 것이냐를 생각하다가 주어진 m 개로 쪼갤 때 사용하는 기준이 되는 합을 mid로 정했습니다. - 나머지는 일반적인 이분탐색 풀이와 같습니다. 하지만 약간 난이도 있는 이분탐색 문제의 특징처럼 단순히 start와 end 만으로 mid를 찾는 방식이 아니라 주어진 조건을 고려하면서 mid값을 찾아나갔습니다.
- 자세한 설명은 주석에 달아놨으니 참고하시면 될 것 같습니다.
- 추가적으로, 앞으로의 모든 알고리즘 풀이( 새로 푸는 문제, 또는 예전에 풀었던 문제를 리마인드 할 때 ) 주석을 다는 습관을 기르라는 친구의 조언이 있었습니다. 앞으로 주석을 열심히 달아보려고 합니다.
( 엇 어이없는 실수를 얘기를 안 했네요. 제가 한 어이없는 실수는 테스트 케이스에서 주어진 m = 3이라는 값을 start 값에 num // 3으로 고정을 시켜서 여러 번 틀린 것입니다.)
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
data = list(map(int,input().split()))
#순서를 유지해야 하므로 정렬을 사용하면 안된다.
# 이분탐색을 두번 적용 시켜서
num = sum(data)
start = 0 # num // 3
end = 10000000000
result = num
while start<=end:
# mid 는 블루레이 크기
mid = (start+end) // 2
if mid < max(data):
start = mid + 1
continue
# cnt 는 블루레이 개수 , tmp 는 블루레이 갱신해주고 있는 블루레이 길이
cnt,tmp =1,0
# 하나씩 더하면서 갱신해준다.
for i in range(len(data)):
# 이전 값이랑 지금 값 더해서 mid 보다 작으면 계속 더해준다
if tmp + data[i] <= mid:
tmp += data[i]
# mid 보다 커지면 현재 data[i]가 tmp 로 들어가고
# 전에 있던 tmp는 0 초기화 해주고 개수 1개 늘려준다.
else:
tmp = data[i]
cnt += 1
# 개수가 m-1보다 작거나 같으면 이분탐색으로 영상 길이 인 mid값 갱신 로직 실행ㄴ
if cnt <= m:
end = mid - 1
result = min(result,mid)
else:
start = mid + 1
print(result)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준]5430(파이썬) - AC (0) | 2022.01.14 |
---|---|
[백준]9019(파이썬) - DSLR (0) | 2022.01.13 |
[백준]18405(파이썬) - 경쟁적 전염 (1) | 2022.01.08 |
[백준]11000(파이썬) - 강의실 배정 (0) | 2022.01.07 |
[백준]12685(파이썬) - 평범한 배낭 (0) | 2022.01.06 |