포포's 코딩&일상 기록

객체이용해서 문제풀이 본문

카테고리 없음

객체이용해서 문제풀이

포포252 2024. 2. 27. 08:34

https://www.codetree.ai/missions/5/problems/indices-of-sorted-array?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

내가푼 풀이 

 

 

cnt =0
class Num:
    def __init__(self,n):
        self.n=n
        global cnt
        self.c=cnt
        cnt += 1
        self.cidx =0

n= int(input())
arr = list(map(int,input().split()))

nList=[]
for a in arr:
    nList.append(Num(a))

#정렬
nList.sort(key=lambda x: x.n)

#변경된 인덱스값 저장
for a in range(0,n):
    nList[a].cidx = a+1

#원래 순서대로 재정렬 
nList.sort(key=lambda x: x.c)

#변경된 인덱스값 출력
for a in nList:
    print(a.cidx,end=" ")

풀이1

 

# 클래스 선언
class Number:
    def __init__(self, number, index):
        self.number, self.index = number, index


# 변수 선언 및 입력
n = int(input())
numbers = []
arr = list(map(int, input().split()))
numbers = [
    Number(num, i)
    for i, num in enumerate(arr)
]
answer = [
    0 for _ in range(n)
]

# Custom Comparator를 활용한 정렬
numbers.sort(key=lambda x: (x.number, x.index))

# 정렬된 숫자들의 원래 인덱스를 활용한 정답 배열 저장
for i, number in enumerate(numbers):
    answer[number.index] = i + 1 # 인덱스 보정

# 출력
for i in range(n):
    print(answer[i], end = ' ')

 

 

풀이2

# 변수 선언 및 입력
n = int(input())
arr = list(map(int, input().split()))
numbers = [
    (num, i)
    for i, num in enumerate(arr)
]
answer = [
    0 for _ in range(n)
]

# Custom Comparator를 활용한 정렬
numbers.sort(key=lambda x: (x[0], x[1]))

# 정렬된 숫자들의 원래 인덱스를 활용한 정답 배열 저장
for i, (_, index) in enumerate(numbers):
    answer[index] = i + 1 # 인덱스 보정

# 출력
for i in range(n):
    print(answer[i], end = ' ')