알고리즘/BOJ

백준 2517번 달리기

꾸준함. 2020. 6. 8. 22:31

문제 링크입니다: https://www.acmicpc.net/problem/2517

 

2517번: 달리기

첫째 줄에는 선수의 수를 의미하는 정수 N이 주어진다. N은 3 이상 500,000 이하이다. 이후 N개의 줄에는 정수가 한 줄에 하나씩 주어진다. 이 값들은 각 선수들의 평소 실력을 앞에서 달리고 있는 ��

www.acmicpc.net

세그먼트 트리와 좌표압축을 활용해야하는 문제였습니다.

각 선수의 실력의 범위는 1 ~ 1,000,000,000 까지이지만 N이 최대 500,000이기 때문에 아래와 같은 알고리즘이 적용 가능합니다.

1. 구조체 벡터를 선언해 ability에는 실력, idx에는 인덱스를 저장해줍니다.

2. 실력 오름차순 정렬을 진행한 뒤, 실력을 [0, N-1) 로 압축해줍니다.

3. 압축을 진행한 벡터에 대해 인덱스 오름차순 정렬을 진행합니다.

4. query 함수를 통해 자신보다 앞서 뛴 주자들 중 자기보다 실력이 안 좋은 선수들의 수를 확인한 뒤 등수를 출력합니다.

5. 등수를 출력한 뒤 현재 주자의 실력을 update 함수를 통해 세그먼트 트리를 업데이트해줍니다.

6. [0, N)까지 4, 5번 반복

 

개발환경:Visual Studio 2019

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 19236번 청소년 상어  (2) 2020.06.15
백준 19235번 모노미노도미노  (0) 2020.06.12
백준 17281번 야구공  (0) 2020.06.04
백준 16964번 DFS 스페셜 저지  (0) 2020.06.04
백준 1941번 소문난 칠공주  (0) 2020.06.04