1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
์ฝ์
์ ๋ ฌ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
์ ๋ ฌ๋ ์์ญ์์ ํ์ฌ ๊ฐ์ ์ฝ์
ํ ์์น ์ ํ์ ์ํด ๋จ์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ด์ง ํ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ๋๋ง ์๊ฐ์ด ๋น ๋ฅผ ๊ฒ ๊ฐ์์, ์ด์ง ํ์์ ์ด์ฉํ๋ค.
์ด์ง ํ์์์ ์ค๊ฐ ๊ฐ๋ณด๋ค ์์์ ์, ํด ์ start๋ end์ ๊ทธ๋ฅ mid๋ฅผ ๋ํด์ค์ ๋ฌดํ Loop์ ๋น ์ง๋ ์ค์๋ฅผ ๋ฒํ๋ค.
start = mid +1, end = mid -1๋ก ํด์ฃผ์ด์ start= 0, mid = 1์ธ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ค์ผ ํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. ์
๋ ฅ
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> list = new ArrayList<>();
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
list.add(Integer.parseInt(st.nextToken()));
}
// 2.
for (int i = 1; i < N; i++) {
int pos = binarySearch(list, i);
int value = list.remove(i);
list.add(++pos, value);
}
int [] sum = new int [N];
sum[0] = list.get(0);
for (int i = 1; i < N; i++) {
sum[i] = sum[i-1] + list.get(i);
}
int acc = 0;
for (int i = 0; i < N; i++) {
acc += sum[i];
}
System.out.println(acc);
}
public static int binarySearch(ArrayList<Integer> list, int now_idx) {
int start = 0;
int end = now_idx-1;
while (start <= end){
int mid = (start+end)/2;
if(list.get(mid)< list.get(now_idx)){
start = mid+1;
}
else if(list.get(mid) > list.get(now_idx)){
end = mid-1;
}
else if(list.get(mid).equals(list.get(now_idx))){
return mid;
}
}
return end;
}
}
4. ์ฑ์ฅ ํ๊ธฐ
๋ฐฐ์ด์์ ์ค๊ฐ ์ฝ์ ์ ์ด๋ป๊ฒ ํ ์ง ์ ๋ชฐ๋ผ์, ArrayList๋ฅผ ์ผ๋ค. ๋ฐฐ์ด๋ง ์ด์ฉํ๋ ํ์ด๋ก ํด๋ณด๊ณ ์ถ์ด์, ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ดค๋ค. ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- 0 ~ ํ์ฌ๊ฐ -1์ ์ ๋ ฌ๋ ์์ญ ์ค ํ์ฌ ๊ฐ์ด ๋ค์ด๊ฐ ์์น ์ฐพ๊ธฐ
- ํ์ฌ ๊ฐ์ด ๋ค์ด๊ฐ ์์น + 1 ~ ํ์ฌ ๊ฐ์ ์์น ๋ด์ ์์ญ์ ๊ฐ์ Arr[j] = Arr[j-1]๋ก ํ์นธ์ฉ ๋ก๊ธฐ๊ธฐ.
(์ต์ด์ ๊ฐ์ธ Arr[ํ์ฌ๊ฐ ์์น]๋ ์ด์งํผ ์ง์ด์ ธ๋ ์๊ด ็ก -> ๊ฐ ์ฎ๊ธฐ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋นผ๋๊ธฐ๋ง ํ๋ฉด ๋๋ค.)
5. ๋ค๋ฅธ ํ์ด
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. ์
๋ ฅ
int N = Integer.parseInt(br.readLine());
int [] arr = new int [N];
int [] sum = new int [N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// 2. ๊ฐ ๋ฃ๊ธฐ
for (int i = 1; i < N; i++) {
int insert_idx = i;
int insert_value = arr[i];
// ํ์ฌ ๊ฐ์ด ์ฝ์
๋ ์์น ์ฐพ๊ธฐ
for (int j = i-1; j >=0; j--) {
// ํ์ฌ ์์ ๋ณด๋ค ๊ฐ์ด ์์ ์์น๋ฅผ ์ฐพ์๋ค๋ฉด, ๊ทธ ์์ ๋ฃ์ผ๋ฉด ๋จ.
if(arr[i] > arr [j]){
insert_idx = j+1;
break;
}
if(j == 0) insert_idx =0;
}
// ์์ชฝ ์ ๋ถ ๋ก๊ธฐ๊ธฐ
for (int j = i; j > insert_idx ; j--) {
arr[j] = arr[j-1];
}
arr[insert_idx] = insert_value;
}
// 3.๋์ ํฉ์ ํฉ ๊ตฌํ๊ธฐ
sum[0] = arr[0];
for (int i = 1; i < N; i++) {
sum[i] = sum[i-1] + arr[i];
}
int acc = 0;
for (int i = 0; i < N; i++) {
acc += sum[i];
}
System.out.println(acc);
}
}