문제 : https://www.acmicpc.net/problem/1015
해석이 좀 복잡해 보일 수 있는 문제이다.
3
2 3 1
위의 예제 1번을 참고하여 풀어보면
A수열 A[0]=2, A[1]=3, A[2]=1 이 주어질 때,
B[P[i]]=A[i]를 만족하는 P수열을 찾아야 한다.
먼저 B수열을 구하여 보면
B[P[0]] = A[0] -> B[1] = 2
B[P[1]] = A[1] -> B[2] = 3
B[P[2]] = A[2] -> B[0] = 1
즉, 1 2 0 이라는 답이 나오게 된다.
위 풀이를 해석하여 보면,
A수열의 i번째가 몇번째로 작은 숫자인지 구하는 문제이다.
즉, 예제 1번의 배열에서 2는 2번째로 작고, 3은 3번째로 작고 1은 1번째로 작으므로 1 2 0 이다.
N=int(input())
li=list(map(int,input().split()))
sort_li=sorted(li)
res=[]
for i in li:
idx=sort_li.index(i)
res.append(idx)
sort_li[idx]=-1
print(*res)
먼저 A수열(li)을 입력받고, 오름차순으로 정렬된 sort_li 수열을 따로 만들어 준다.
그리고, li 수열을 순회하면서 해당 숫자가 sort_li배열에서 몇번째 idx인지 구해 결과배열에 추가하여 주면 끝.
이때, 중복된 숫자가 존재할 수 있으므로 이미 idx를 구한 숫자는 sort_li에서 -1로 바꾸어 준다.