Skip to content

Commit a3c8c96

Browse files
authored
Merge pull request #509 from AlgorithmWithGod/0224LJH
[20250720] BOJ / G4 / 소트 / 이종환
2 parents 981699a + 67c8192 commit a3c8c96

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

0224LJH/202507/20 BOJ 소트 .md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
```java
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
import java.util.StringTokenizer;
6+
7+
8+
public class Main {
9+
10+
static int len,changeCnt,left;
11+
static int[] arr;
12+
13+
14+
public static void main(String[] args) throws IOException {
15+
init();
16+
process();
17+
print();
18+
}
19+
20+
private static void init() throws IOException {
21+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
22+
len = Integer.parseInt(br.readLine());
23+
arr = new int[len];
24+
25+
StringTokenizer st = new StringTokenizer(br.readLine());
26+
for (int i = 0; i < len; i++) {
27+
arr[i] = Integer.parseInt(st.nextToken());
28+
}
29+
changeCnt = Integer.parseInt(br.readLine());
30+
left = changeCnt;
31+
}
32+
33+
private static void process() {
34+
//i번 인덱스를 조사하는데 n번의 기회가 남았을 때,
35+
//지금 인덱스에서 1~n칸만큼 떨어진 숫자들 중 가장 큰 값 찾음.
36+
//제일 큰 값을 i번 인덱스에 넣고, 나머지 값들은 다 한칸씩 미룸
37+
//남은 횟수 갱신
38+
//이를 끝까지 가거나, 기회를 다 쓰면 끝
39+
int curIdx = 0;
40+
while (curIdx < len-1 && left > 0 ){
41+
int max = arr[curIdx];
42+
int maxIdx = curIdx;
43+
44+
for (int i = curIdx+1; (i < len && i <= curIdx + left ); i++) {
45+
if (arr[i] > max){
46+
max = arr[i];
47+
maxIdx = i;
48+
}
49+
}
50+
51+
rangeSwap(curIdx, maxIdx);
52+
left -= maxIdx - curIdx;
53+
curIdx++;
54+
}
55+
56+
57+
}
58+
59+
private static void rangeSwap(int fromIdx, int toIdx) {
60+
for (int i = toIdx; i > fromIdx; i--) {
61+
swap(i, i-1);
62+
}
63+
}
64+
65+
private static void swap(int tIdx1, int tIdx2) {
66+
int tmp = arr[tIdx1];
67+
arr[tIdx1] = arr[tIdx2];
68+
arr[tIdx2] = tmp;
69+
}
70+
71+
72+
73+
private static void print() {
74+
for (int i = 0; i < len; i++) {
75+
System.out.print(arr[i] + " ");
76+
}
77+
}
78+
79+
80+
81+
}
82+
83+
84+
85+
```

0 commit comments

Comments
 (0)