문제 (https://www.acmicpc.net/problem/3020)
문제를 읽고 고민을 하다가.. 예전에 푼 문제에서 lower_bound와 upper_bound를 사용했던 게 생각이 났다. 구현을 해봤지만 시간 초과가 발생했고 구글링으로 약간의 힌트를 얻은 후 구현했다.
석순과 종유석을 각각 입력받고 정렬한다. 정렬 후, 1부터 h까지 반복하며 각 높이일 때 몇 개의 장애물을 파괴하는지를 구한다. 이때 lower_bound를 사용하는 것이다. 장애물의 개수를 구하고 저장할 때 종유석의 경우 반대 방향이므로 변수를 주의해서 넣어주어야 한다.
해당 높이에서 파괴되는 장애물의 개수를 구했으면, 그 개수가 최솟값인지 확인해준다. 최솟값이 갱신되었다면 카운트를 1로 설정해주고, 최솟값과 일치하면 카운트를 증가시켜준다.
lower_bound: value 값 보다 크거나 같은 첫 번째 원소의 주소
upper_bound: 처음으로 value 값을 초과하는 원소의 주소
[소스코드]
[시간초과 소스코드]
'ALGORITHM > BOJ' 카테고리의 다른 글
[BOJ] 2887번 행성 터널 (C++) (0) | 2022.01.05 |
---|---|
[BOJ] 1939번 중량제한 (C++) (0) | 2022.01.05 |
[BOJ] 4386번 별자리 만들기 (C++) (0) | 2022.01.04 |
[BOJ] 11779번 최소비용 구하기 2 (C++) (0) | 2022.01.04 |
[BOJ] 1484번 다이어트 (C++) (0) | 2022.01.03 |