728x90
1083번: 소트
크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트한 결과가 사전
www.acmicpc.net
🤔 문제분석
골드5치고 어려웠던 문제였다. 문제의 요점은 정렬이 되어있지 않은 수 중에서 S보다 작거나 같게 움직였을때 가장 큰 수를 골라야한다. 가장 큰 수를 골라야함으로 그리디 유형의 문제이다.
배열을 순회하면서 현재 리터레이션에서 멀리있으면서 가장 큰 수를 찾는다.
- 현재 값에서 가장 멀리있으면서 가장 큰수의 인덱스와 값을 찾는다.
- 현재 인덱스와 가장 큰 인덱스를 교체한뒤 움직인 만큼 S값을 갱신한다. (S -= (가장큰인덱스 - 현재 인덱스))
💻 코드
import sys
input = sys.stdin.readline
def max_n(index):
max_value, idx = arr[index], index
for i in range(index + 1, min(N, index + S + 1)):
if arr[i] > max_value:
max_value = arr[i]
idx = i
return max_value, idx
N = int(input())
arr = list(map(int, input().split()))
S = int(input())
for i in range(N - 1):
max_value, idx = max_n(i)
if idx != i:
arr.pop(idx)
arr.insert(i, max_value)
S -= (idx - i)
print(*arr)
🎯 피드백 및 개선사항
다음주에는 그리디 문제의 유형을 풀어보아야겠다. 정렬문제를 풀면서 그리디한 유형이 많이 나왔는데 아직까지도 부족한것 같습니다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 3649번 : 로봇 프로젝트 (0) | 2024.02.17 |
---|---|
[백준] 1374번 : 강의실 (0) | 2024.02.16 |
[백준] 1911번 : 흙길 보수하기 (0) | 2024.02.15 |
[백준] 13334번 : 철로 (0) | 2024.02.15 |
[백준] 13164번 : 행복 유치원 (0) | 2024.02.14 |