백준(Python) 풀이/이분 탐색

백준(Python) 18870번 좌표 압축 풀이

개발윗미 2022. 5. 16. 16:18

Python으로 구현한 18870번 좌표 압축 문제 풀이입니다.

 

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

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net


from bisect import bisect_right

n = int(input())
data = list(map(int, input().split()))
sorted_data = sorted(list(set(data)))

def search(data, right_value) :
    right_index = bisect_right(data, right_value)
    return right_index - 1

for target in data :
    print(search(sorted_data, target), end=' ')

 

1. 입력받은 data 리스트의 요소의 중복을 제거하고 오름차순으로 정렬하여 sorted_data 리스트에 할당한다.

 

2. data 리스트의 요소(target)를 하나씩 가져와 search() 함수에 전달하여 반환받은 값을 출력한다.

 

3. search() 함수에서는 bisect_right() 을 통해 리스트에 가장 우측에 존재하는 right_value 값을 갖는 인덱스를 구하고, 1을 감소시켜 반환한다.