백준 1083번 소트 G4
문제
크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트 할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트 한 결과가 사전순으로 가장 뒤서는 것을 출력한다.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 원소가 차례대로 주어진다. 이 값은 1000000보다 작거나 같은 자연수이다. 마지막 줄에는 S가 주어진다. S는 1000000보다 작거나 같은 음이 아닌 정수이다.
출력
첫째 줄에 문제의 정답을 출력한다.
탐욕적인 방법으로 풀이할 수 있다.
현재 검색가능한 범위 내의 값 중 가장 큰 원소를 앞으로 옮기면 되는 문제이다.
s 값으로 인해 범위가 초과되지 않도록, s와 n 중 작은 범위를 택하였다.
사전 순으로 앞서기 위해, 가장 앞선 인덱스부터 검색을 진행한다.
더보기
import sys
n = int(sys.stdin.readline())
subs = list(map(int, sys.stdin.readline().split()))
s = int(sys.stdin.readline())
for i in range(n-1):
if s <= 0: break
max_either = max(subs[i+1:min(i+1+min(s, n), n)])
if subs[i] > max_either: continue
index = subs.index(max_either)
s -= index-i
for j in range(index, i, -1):
subs[j], subs[j-1] = subs[j-1], subs[j]
print(*subs)
'알고리즘 문제 풀이 > 항해99 코테 스터디' 카테고리의 다른 글
[99클럽/파이썬 챌린저/22일차] 산 모양 타일링 (0) | 2024.11.18 |
---|---|
[99클럽/파이썬 챌린저/21일차] 우주 탐사선 (0) | 2024.11.17 |
[99클럽/파이썬 챌린저/19일차] 소용돌이 예쁘게 출력하기 (0) | 2024.11.16 |
[99클럽/파이썬 챌린저/18일차] 상담원 인원 (0) | 2024.11.14 |
[99클럽/파이썬 챌린저/17일차] 작업 (0) | 2024.11.13 |