Notice
Recent Posts
Recent Comments
Tags
- TIL
- 코딩테스트
- programmers
- 장고 기초
- spring 기초
- Spring 초보
- 백준 DFS와 BFS
- Django 기초
- 알고리즘 공부
- 99클럽 코테 스터디
- 프로그래머스 level1
- 코테
- dp 알고리즘
- 이분탐색
- 백준 구현
- 항해99 코테 스터디
- 프로그래머스 레벨1
- 백준 dp
- 백준 다이나믹프로그래밍
- Django
- 장고
- 항해99
- 코딩테스트 연습
- 알고리즘 문제
- 코테 연습
- 스프링 기초
- 백준
- BFS
- 스프링 초보
- 프로그래머스
Archives
- Today
- Total
일일구름 IT
[99클럽 코테 스터디 TIL 4일차 / 백준 2343] 기타 레슨 (Python) 본문
이번주 문제들은 다 이분 탐색에 대한 문제인 것 같다.
처음에 문제를 풀고 단순히 모든 강의 길이의 합을 m으로 나누어 평균을 구하고, 모든 강의를 넣는 다면 평균 크기인 블루레이 몇개 필요한지 구했다. 만약 블루레이 개수가 m보다 크면 평균 +1 을 해주고 작으면 평균 -1 을 하여 m과 같을때까지 블루레이 개수를 구했다.
이렇게 코드를 작성하여 제출한 결과 당연히 실패가 떴다.
역시 시간초과를 해결할때는 이분탐색이 기본인 것 같다.
내 코드
n, m = map(int, input().split())
lessons = list(map(int, input().split()))
left = max(lessons)
right = sum(lessons)
while (left <= right):
mid = (left + right) // 2
cnt = 1
b = 0
for l in lessons:
if b + l <= mid:
b += l
else:
b = l
cnt += 1
if cnt > m: left = mid + 1
else: right = mid - 1
print(right + 1)
1. left에 가장 작은 블루레이 크기인 가장 긴 강의의 길이 값을 넣어준다.
2. right에 가장 큰 블루레이 크기인 모든 강의 길이의 합을 넣어준다.
3. mid 값을 구해준 뒤, 블루레이 크기를 mid로 설정하고 몇개의 블루레이가 필요한지 구한다.
4. 필요한 블루레이 개수가 m보다 크면 left = mid + 1을 해주고 다시 구한다.
5. 필요한 블루레이 개수가 m보다 작으면 right = mid - 1을 해주고 다시 구한다.
이렇게 이분탐색을 통해 코드 구현을 하였다 !!
왠만한 탐색에서 시간초과는 이분탐색으로 해결이 되는 것 같다 ! 꺄울
이분탐색을 알게되니 문제 푸는 시간이 많이 줄었다 ~!
오픽을 담주 수욜로 미루려고 했는데 평일 오픽 시험 시간은 알바 시간이랑 다 겹쳐서 담주 토욜로 미뤘다 ..
너무 루즈해지는 건 싫은ㄷㅔ ㅜㅜ
제발 IH 받게 해주세열 ~~
https://www.acmicpc.net/problem/2343
'99클럽 코테 스터디 TIL' 카테고리의 다른 글
[99클럽 코테 스터디 TIL 7일차 / 백준 1697] 숨바꼭질 (Python) (0) | 2025.01.21 |
---|---|
[99클럽 코티 스터디 TIL 6일차 / 백준 1260] DFS와 BFS (Python) (0) | 2025.01.20 |
[99클럽 코테 스터디 TIL 3일차 / 백준 11663] 선분 위의 점 (Python) (0) | 2025.01.15 |
[99클럽 코테 스터디 TIL 2일차 / 백준 1654] 랜선 자르기 (Python) (0) | 2025.01.14 |
[99클럽 코테 스터디 TIL 1일차 / 백준 2776] 암기왕 (Python) (0) | 2025.01.13 |