Part3.10_이분탐색(결정알고리즘)&그리디 알고리즘_역수열(그리디)

Eugenius1st·2022년 1월 14일
0

Python_algorithm

목록 보기
16/83

역수열

내가 생각한 코드1

#1. Alt+W+N 입력하고 Alt+W+V :

import sys
from collections import deque # deque import
sys.stdin = open("input.txt", "rt")

n = int(input())
a = list(map(int,input().split()))
T = []
res = []

for x in range(n):
    T.append((x+1,a[x]))
T.sort(reverse=True)

for x in range(n):
    res.insert(T[x][1],T[x][0])

for x in res:
    print(x, end=" ")

배열3개에 for문 3개가 좀 오바라고 생각해서 이렇게 했지만 또 생각해보았다...

내가 생각한 코드2

#1. Alt+W+N 입력하고 Alt+W+V :

import sys
from collections import deque # deque import
sys.stdin = open("input.txt", "rt")

n = int(input())
a = list(map(int,input().split()))
res = []

for x in range(n-1,-1,-1):
    res.insert(a[x],x+1)
for x in res:
    print(x, end=" ")

근데 이걸 for문 안에 n-1, -1, -1 이 아니라 좀 더 깔끔하게 할 수는 없을까...

선생님 코드

배열
seq 0 0 0 0 0 0 0 0 만들고
1 2 3 4 5 6 7 8 을 각각 넣어주는데
1이 5면 5번째 0에 넣어주고
점점 큰 숫자들을 만날때마다.. 이미 자리를 차지하고 있으면 그 뒷자리에 넣어준다.(어차피 자리 차지하고 있는 수 그 뒤로가도 나보다 작은 수이므로 상관이 없다.)
오름차순이므로, 작은 수는 무시하고 앞 큰수를 위한 빈칸을 만들어 둔다.

즉 for문 돌면서 i번째 들어간 값이 0이면 -1씩 작아지도록 한다.. 오름차순이니..
그래서 들어간 값이 0이고 방의 값이 0이면 그 위치에 1을 넣어주는것..

#1. Alt+W+N 입력하고 Alt+W+V :

import sys
sys.stdin = open("input.txt", "rt")

n = int(input())
a = list(map(int,input().split()))
seq = [0]*n

for i in range(n):
    for j in range(n):
        if a[i] == 0 and seq[j]==0: #0은 빈공간을 확보했다는 뜻
            seq[j] = i+1
            break
        elif seq[j]==0:
            a[i]-=1
for x in seq:
    print(x, end=" ")
profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글