본문 바로가기

BaekJoon

백준 9576 책 나눠주기

https://www.acmicpc.net/problem/9576

 

요청자의 [a,b] 쌍이 주어졌을 때

b기준으로 쌍을 정렬(오름차순)하거나 a기준으로 쌍을 정렬(내림차순)하는 방식으로

모두 문제의 해결이 가능합니다. 

 

나눠줄 책의 수 N=5, 신청인원 M=5이고

다음과 같은 신청이 있다고 가정해 봅시다.

a b

2 3
3 4
2 5
1 5
3 4

 

* b기준으로 쌍을 정렬하는 경우

 

[a,b]의 범위로 신청했을 경우
[a,b]쌍을 b를 기준으로 오름차순으로 정렬합니다.
[a,b]쌍을 루프를 돌면서 a~b의 범위에서 낮은 번호의 책부터 나눠줍니다.
이 때 나눠준 책은 체크표시를 해 줍니다. (보통 visited[] 배열...)

 

b를 기준으로 정렬하면 아래와 같습니다.

a b

2 3
3 4

3 4
2 5
1 5

 

visited 초기 배열은 숫자 아래와 같습니다.

[0, 0, 0, 0, 0]

 

아래와 같이 요청을 하나하나 처리해 갑니다.

 

a b

2 3   2부터 3까지 순서대로 방문을 하는데 2번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 0, 0, 0]
3 4   3부터 4까지 순서대로 방문을 하는데 3번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 1, 0, 0]

3 4   3부터 4까지 순서대로 방문을 하는데 3번 책은 없고 4번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 1, 1, 0]
2 5   2부터 5까지 순서대로 방문을 하는데 2/3/4번 책은 없고 5번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 1, 1, 1]
1 5  1부터 5까지 순서대로 방문을 하는데 1번 책이 있으므로 나누어 주고 체크 합니다.    [1, 1, 1, 1, 1]

 

총 5권의 책을 줄 수 있습니다.

 

 

 

* a기준으로 쌍을 정렬하는 경우 

 

[a,b]의 범위로 신청했을 경우
[a,b]쌍을 a를 기준으로 내림차순으로 정렬합니다.
[a,b]쌍을 루프를 돌면서 b~a의 범위에서 높은 번호의 책부터 나눠줍니다.
이 때 나눠준 책은 체크표시를 해 줍니다.

 

a b

3 4   4부터 3까지 순서대로 방문을 하는데 4번 책이 있으므로 나누어 주고 체크 합니다.    [0, 0, 0, 1, 0]

3 4   4부터 3까지 순서대로 방문을 하는데 4번 책은 없고 3번 책이 있으므로 나누어 주고 체크 합니다.    [0, 0, 1, 1, 0]
2 3   3부터 2까지 순서대로 방문을 하는데 3번 책은 없고 2번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 1, 1, 0]

2 5   5부터 2까지 순서대로 방문을 하는데 5번 책이 있으므로 나누어 주고 체크 합니다.    [0, 1, 1, 1, 1]

1 5   5부터 1까지 순서대로 방문을 하는데 5/4/3/2번 책이 없고 1번 책이 있으므로 나누어 주고 체크 합니다.    [1, 1, 1, 1, 1]

'BaekJoon' 카테고리의 다른 글

백준 11501 주식  (0) 2022.03.26
백준 11670 초등 수학  (0) 2022.03.24
백준 13904 과제  (0) 2022.03.13
백준 12534 Battlefield (Large)  (0) 2022.03.12
1185 유럽여행  (0) 2021.10.04