[백준] 1083 : 소트 - Python

Chooooo·2023년 1월 30일
0

알고리즘/백준

목록 보기
32/182
post-thumbnail

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

N = int(input())
data = list(map(int, input().split()))
S = int(input())

# 연속된 두개의 원소만 교환 가능
for i in range(N):
    max_num = max(data[i:min(N, i+S+1)])
    idx = data.index(max_num)  #해당 최댓값..

    for j in range(idx, i, -1):
        data[j], data[j-1] = data[j-1], data[j]

    #이후에 S값 갱신
    S -= idx -i
    if S == 0:
        break

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

🎃 코멘트
사전 반대순이라는 말은 리스트를 큰 순서대로 나열하는 것이다. 현재 인덱스를 기준으로 뒤에 가장 큰 값을 비교한다. 남은 횟수가 없으면 종료.

  • 처음에는 현재 위치의 수가 바로 다음 위치의 수보다 작을 경우 교체하는 연산을 s번 진행하는 방식으로 코드 작성.

이 문제는 결국 바로 다음 수만 비교하는게 아니라. 현재 위치보다 뒤에 있는 수 중에서 가장 큰 수와 비교하는 방식으로 풀었어야 했다. - 당겨올 수 있도록 !

이 문제의 키 포인트는 만약 S가 5라면 현재위치로부터 5개의 위치에서 가장 큰 값을 맨 앞으로 가져올 수 있다는 점이다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글