[알고리즘] 백준 18870 좌표 압축 (파이썬 풀이)

    728x90

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

     

    18870번: 좌표 압축

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

    www.acmicpc.net

    해결코드

    n = int(input())
    n_li = list(map(int, input().split()))
    li = []
    li = list(sorted(set(n_li)))
    
    li_dic = {li[i]: i for i in range(len(li))}
    
    for i in n_li:
        print(li_dic[i], end=' ')

    문제풀이

    좌표 압축문제로 'Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다' 라는 말은

    리스트 원소 크기 순서를 출력하라는 뜻이다.

     

    코드를 보자

     

    n = int(input())

    n에 수의 개수를 받아준다.

     

    n_li = list(map(int, input().split()))

    n_li에 공백을 포함하여 n개의 원소를 입력받아 리스트를 만들어준다.

     

    li = []
    li = list(sorted(set(n_li)))

    li라는 리스트를 만든다.

    n_li를 set함수를 통해 중복값을 없앤후 오름차순 정렬 후 list화 시킨 것을 li에 넣어준다.

     

    li_dic = {li[i]: i for i in range(len(li))}

    li_dic이라는 딕셔너리를 만들어준다.

    (li의 원소와 인덱스 번호를 차례대로 넣어준다)

    ex) li = [-10, -9, 2, 4] 이면 li_dic = {-10: 0, -9: 1, 2: 2, 4: 3}

     

    for i in n_li:
        print(li_dic[i], end=' ')

    n_li의 원소로 for문을 실행시킨다.

    li_dic[i]를 실행하면 n_li 원소의 인덱스 값이 순서대로 출력된다.

    728x90

    댓글