IT/알고리즘

[백준] 책 나눠주기 9576.python

Terriermon 2021. 2. 11. 03:29

 문제

- 총 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