문제
- 총 N권의 책을 최대 몇 명에게 나눠 줄 수 있는지 찾는 문제
- 학생들은 a에서 b까지 책 번호 내에서 책을 받는다.
해설 및 코드
참고 블로그: steady-coding.tistory.com/230
[BOJ] 백준 9576번 : 책 나눠주기 (JAVA)
문제 백준이는 방 청소를 하면서 필요 없는 전공 서적을 사람들에게 나눠주려고 한다. 나눠줄 책을 모아보니 총 N권이었다. 책이 너무 많기 때문에 백준이는 책을 구분하기 위해 각각 1부터 N까
steady-coding.tistory.com
- 해당 문제는 그리디로 해결이 가능하다.
- b로 정렬 후 a로 정렬한다.
- 그 이유는 해당 블로그에 잘 나와있다.
# 그리디
T = int(input())
for _ in range(T):
N, M = map(int,input().split())
books = []
for _ in range(M):
[a, b] = map(int, input().split())
books.append( [a, b] )
# b를 기준으로 정렬 후, 같으면 a로 정렬
books.sort(key = lambda x: (x[1], x[0]))
# 정렬한 순서대로 a번의 책을 준다.
nl = [False for i in range(N+1)]
result = 0
for book in books:
for i in range(book[0], book[1]+1):
if nl[i] == False:
nl[i] = True
result += 1
break
print(result)
Python 문법 정리
- False로 초기화 된 list
nl = [False for i in range(N+1)]
'IT > 알고리즘' 카테고리의 다른 글
[이코테] 미래도시.java (0) | 2021.02.27 |
---|---|
[이코테] 큰 수의 법칙.python (0) | 2021.02.12 |
[백준] 좌표정렬하기 11650.python (0) | 2021.02.10 |
[백준] 단어정렬 1181.python (0) | 2021.02.09 |
[백준] 보물 1026.python (0) | 2021.02.09 |