[๋ฐฑ์ค/1015/์์ด ์ ๋ ฌ]
https://www.acmicpc.net/problem/1015
1015๋ฒ: ์์ด ์ ๋ ฌ
P[0], P[1], ...., P[N-1]์ 0๋ถํฐ N-1๊น์ง(ํฌํจ)์ ์๋ฅผ ํ ๋ฒ์ฉ ํฌํจํ๊ณ ์๋ ์์ด์ด๋ค. ์์ด P๋ฅผ ๊ธธ์ด๊ฐ N์ธ ๋ฐฐ์ด A์ ์ ์ฉํ๋ฉด ๊ธธ์ด๊ฐ N์ธ ๋ฐฐ์ด B๊ฐ ๋๋ค. ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ B[P[i]] = A[i]์ด๋ค. ๋ฐฐ์ด A๊ฐ ์ฃผ
www.acmicpc.net
<<ํ์ด>>
DP
ํ์ด 1
-> ์ผ๋จ ์ด ํ์ด๋ ํ๋ฆฐ ๋ต์ด๋ค ใ ใ
๋ ผ๋ฆฌ์ ์ผ๋ก๋ ๋ง๋ค๊ณ ๋ ์๊ฐํ์ง๋ง hashmap์ ํน์ฑ์ ๊ฐ๊ณผํ๊ณ ํ์๋ค ใ
map์ ์ค๋ณต ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง ์๋ค๋ณด๋ ์ด๋ฏธ ์๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์ง์ฐ๊ณ ์๋กญ๊ฒ ๋ฃ์ด์ค๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ์ ํ์ด๋ ํ๋ฆฌ๊ฒ ๋๋ ๊ฒ์ด๋ค ใ ใ
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
class Main {
private int[] solution(HashMap<Integer, Integer> map, int[] brr, int n) {
int[] answer = new int[n];
for (int i=0; i<n; i++) {
answer[i] = map.get(brr[i]);
map.put(brr[i], map.get(brr[i])+1);
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner in = new Scanner(System.in);
HashMap<Integer, Integer> map = new HashMap<>();
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
int[] brr = new int[n];
System.arraycopy(arr, 0, brr, 0, arr.length);
Arrays.sort(arr);
for (int i = 0; i < n; i++) {
map.put(arr[i], i);
}
for(int x : T.solution(map, brr, n)) System.out.print(x + " ");
}
}
ํ์ด2
์ผ๋ฐ์ ์ผ๋ก ๊ตฌํ์ ํ ํ์ด์ด๋ค. ์ด ํ์ด์ ํต์ฌ์ 3๊ฐ์ง์ด๋ค. ์ฐ์ ์ ๋ ฌ์ด๋ค. ์ ๋ ฌ์ ํ๊ฒ ๋๋ฉด ์์๊ด๋ จํ ๋ฌธ์ ์์ ์ํ๊ณ ์ ํ๋ ๊ฐ์ ๊ตฌํ๊ธฐ๊ฐ ์ฌ์์ง๋ค. ๊ทธ๋ค์ ์ธ๋ฑ์ค ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ ์ํ P ๋ฐฐ์ด, ๋ฃ์ด์ค ๋ฐฐ์ด์ ๋ ๋ค์ ์ฌ์ฉ๋๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ (๋๋ฝ ๋ฐ์) 1๋ฅผ ์ค์ผ๋ก์จ ๋๋ฝ๊ณ์ฐ ํผํ๊ธฐ์ธ sortedIndex ๋ฐฐ์ด์ ์ค์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ์์ํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์ ์์ฒด๋ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๊ฒ์ด ์๋๋ฐ ์ฝ๊ฐ ํด๋งจ๊ฑฐ๋ฅผ ๋ณด๋ ์์ง ๋ ํ์ฐธ ๋ฉ์๋ค ใ ใ ใ ใ
๋ ์ด์ฌํ ํ์ !!
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // ๋ฐฐ์ด A์ ํฌ๊ธฐ N ์
๋ ฅ
int[] a = new int[n]; // ๋ฐฐ์ด A
Integer[] p = new Integer[n]; // ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ง๋๋ ์์ด P
int[] sortedIndex = new int[n]; // ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ถ์
for (int i = 0; i < n; i++) {
a[i] = in.nextInt(); // ๋ฐฐ์ด A์ ์์ ์
๋ ฅ
p[i] = i; // ์ด๊ธฐ์ P[i]๋ฅผ i๋ก ์ค์
}
// ๋ฐฐ์ด A๋ฅผ ๋ณต์ฌํ์ฌ ์ ๋ ฌ
int[] sortedA = a.clone();
Arrays.sort(sortedA);
// ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์๋ณธ ๋ฐฐ์ด์์์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ P ๋ฐฐ์ด์ ํ ๋น
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (sortedA[i] == a[j] && sortedIndex[j] == 0) {
sortedIndex[j] = 1; // ์ธ๋ฑ์ค ์ฌ์ฉ ํ์
p[j] = i; // P ๋ฐฐ์ด์ ์ ๋ ฌ๋ ์ธ๋ฑ์ค ํ ๋น
break;
}
}
}
// ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ง๋๋ ์์ด P ์ถ๋ ฅ
for (int i = 0; i < n; i++) {
System.out.print(p[i] + " ");
}
}
}
import java.util.Arrays;
import java.util.Scanner;
class Main {
static int n;
static int[] P;
static int[] ch;
private int[] solution(int[] arr, int[] brr) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (brr[i] == arr[j] && ch[j] == 0) {
ch[j] = 1;
P[j] = i;
break;
}
}
}
return P;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
int[] arr = new int[n];
P = new int[n];
ch = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
int[] brr = arr.clone();
Arrays.sort(brr);
for(int x : T.solution(arr, brr)) System.out.print(x + " ");
}
}
<<์ถ๊ฐ ๊ณต๋ถ>>
System.arraycopy(arr, 0, brr, 0, arr.length);
-> ๋ฐฐ์ด์ ๋ณต์ฌํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ ์ถ๊ฐํ ๋ ์ด์ฉํ๋ ๋ฐฉ์์ด๋ค.
ํด์ค : arr ๋ฐฐ์ด ์ธ๋ฑ์ค 0๋ถํฐ (arr[0]) ํด์ brr ๋ฐฐ์ด์ ์ธ๋ฑ์ค 0๋ถํฐ (brr[0]) arr.length - 1๊น์ง arr์ ๋ณต์ฌํ๊ฒ ๋ค.
์ฃผ๋ก ํฉ์น ๋ ๋ง์ด ์ด์ฉํ ๊ฒ์ผ๋ก ์๊ฐ๋๋ค.
clone
-> ์ด๋ ๋ฉ์๋์ด๋ค. brr = arr.clone(); ์ ํ๊ฒ ๋๋ฉด arr๋ฐฐ์ด์ ๊ทธ๋๋ก brr์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค. ์ฃผ๋ก ๋ฐฐ์ด์ ๋ณํํ๊ธฐ ์ ์ ๊ธฐ์กด ๊ฐ์ ๋นผ๋๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/1018/๊ตฌํ/์ฒด์คํ ๋ค์ ์น ํ๊ธฐ] (1) | 2024.04.11 |
---|---|
[์ธํ๋ฐ/BFS/11. ๋ฏธ๋ก์ ์ต๋จ๊ฑฐ๋ฆฌ ํต๋ก] (0) | 2024.04.09 |
[์ธํ๋ฐ/DFS/10.๋ฏธ๋กํ์] (5) | 2024.04.01 |
[์ธํ๋ฐ/DFS/9.์กฐํฉ๊ตฌํ๊ธฐ] - ์ ๋ฆฌ ์ค - (0) | 2024.03.26 |
[๋ฐฑ์ค/1271/์์ฒญ๋ ๋ถ์2] (0) | 2024.03.26 |
๋๊ธ