๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1083)
< ์ํธ >
๋ฌธ์ ํ์ด
๊ฐ์ฅ ํฐ ๊ฐ๋ถํฐ ์์ผ๋ก ์ฌ ์ ์๋์ง ํ์ธํ๋ฉฐ ๊ฐ๋ฅํ๋ฉด ์์ผ๋ก ๊ฐ์ ธ์จ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;
public class _1083_ { // ์ํธ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
st = new StringTokenizer(bf.readLine());
ArrayList<int[]> list = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(Integer.parseInt(st.nextToken()));
list.add(new int[] { i, arr.get(i) });
}
int s = Integer.parseInt(bf.readLine());
Collections.sort(list, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1])
return o1[0] - o2[0];
return o2[1] - o1[1];
}
});
int idx = 0;
while (s > 0) {
for (int i = 0; i < list.size(); i++) {
int info[] = list.get(i);
if (info[1] > arr.get(idx) && info[0] - idx <= s) {
s -= (info[0] - idx);
arr.remove(info[0]);
arr.add(idx, info[1]);
break;
}
}
list.clear();
idx += 1;
if (idx == n) {
break;
}
for (int i = idx; i < n; i++) {
list.add(new int[] { i, arr.get(i) });
}
Collections.sort(list, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1])
return o1[0] - o2[0];
return o2[1] - o1[1];
}
});
}
for (int i = 0; i < n; i++) {
bw.write(arr.get(i) + " ");
}
bw.flush();
}
}
๋ณ์)
n : ๋ฐฐ์ด ํฌ๊ธฐ
list : [index, ๋ฐฐ์ด ๊ฐ]
arr : ๋ฐฐ์ด
s : ์ต๋ ๊ตํ ํ์
idx : ๋ฐฐ์ด ๋ฐ๊ฟ ์์น
๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ๋ฐฐ์ด ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด ๊ฐ์ ์ ๋ ฅ๋ฐ์ arr์ ์ ์ฅํ๋ค. ์ํธํ ๊ฒฐ๊ณผ๊ฐ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ๋ท์๋ ๊ฒ์ ์ถ๋ ฅํ๋ ค๋ฉด ํฐ ๊ฐ์ด ์์ ์์ผ ํ๋ค. ArrayList์ [index, ๋ฐฐ์ด ๊ฐ]์ ์ ์ฅํ ํ ๋ฐฐ์ด ๊ฐ์ด ํฐ ์์๋๋ก, ๋ฐฐ์ด ๊ฐ์ด ๊ฐ๋ค๋ฉด index๊ฐ ์์ ์์๋๋ก ์ ๋ ฌํ๋ค. ๋ฐฐ์ด 0๋ฒ์งธ ๊ฐ๋ถํฐ ํฐ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด idx๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ฉฐ s๊ฐ 0๋ณด๋ค ํด ๋ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) ์ ๋ ฌํ list๋ฅผ ์ํํ๋ฉฐ ํ์ฌ idx์์น์ ์๋ ๋ฐฐ์ด ๊ฐ ๋ณด๋ค ํฌ๊ณ ๊ตํ ํ์๊ฐ ๋จ์์๋ค๋ฉด ๊ตํ ํ์๋ฅผ ์ฐจ๊ฐํ๊ณ ๊ฐ์ idx์์น๋ก ๊ฐ์ ธ์จ ํ ์ํ์ ์ข ๋ฃํ๋ค.
2) list๋ฅผ ๋น์ฐ๊ณ ๋ค์ ์์น์ ๋ฐฐ์ด ๊ฐ์ ๊ตํํด์ผ ํ๋ฏ๋ก idx+1์ ํ๋ค.
3) idx๊ฐ n๊ณผ ๊ฐ๋ค๋ฉด ๋ ์ด์ ๊ตํํ ๊ฐ์ด ์์ผ๋ฏ๋ก ์ข ๋ฃํ๋ค.
4) ๋ฐฐ์ด์ idx๋ฒ์งธ ๊ฐ๋ถํฐ ๋๊น์ง list์ [index, ๋ฐฐ์ด ๊ฐ]์ ์ ์ฅํ ํ ์์์์ ์ ๋ ฌ ์กฐ๊ฑด๊ณผ ๋๊ฐ์ด ์ ๋ ฌํ๋ค.
๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 6219_์์์ ์๊ฒฉ (0) | 2024.03.21 |
---|---|
[Baekjoon] 8896_๊ฐ์ ๋ฐ์ ๋ณด (0) | 2024.03.20 |
[Baekjoon] 12931_๋ ๋ฐฐ ๋ํ๊ธฐ (0) | 2024.03.18 |
[Baekjoon] 16938_์บ ํ ์ค๋น (1) | 2024.03.15 |
[Baekjoon] 5549_ํ์ฑ ํ์ฌ (0) | 2024.03.14 |