https://www.acmicpc.net/problem/22858
22858번: 원상 복구 (small)
수가 적혀있는 $P_1, P_2, ..., P_N$ $N$개의 카드가 있다. 1부터 N까지 수가 하나씩 존재하는 $D_1, D_2, ... , D_i , ... D_N$ 가 있다. 이때 $D_i$는 $P_{D_i}$ 값을 $i$ 번째로 가지고 오는 것을 의미한다. 이러한
www.acmicpc.net
코드
package com.company;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n, k;
int[] arr, D, temp;
String[] s = br.readLine().split(" ");
n = Integer.parseInt(s[0]);
k = Integer.parseInt(s[1]);
arr = new int[n + 1];
D = new int[n + 1];
s = br.readLine().split(" ");
//k번 섞은 배열
for (int i = 1; i <= n; i++) {
arr[i] = Integer.parseInt(s[i-1]);
}
s = br.readLine().split(" ");
//D 배열
for (int i = 1; i <= n; i++) {
D[i] = Integer.parseInt(s[i-1]);
}
for (int i = 0; i < k; i++) {
temp = new int[n+1];
for (int j = 1; j <= n; j++) {
temp[D[j]] = arr[j];
}
arr = temp;
}
for (int i = 1; i <= n; i++) {
sb.append(arr[i]+ " ");
}
System.out.println(sb.toString());
}
}
풀이
문제를 잘못 이해해서 헤맸던 문제이다. 위 문제의 풀이는 다음의 식에 있다.
temp[D[j]] = arr[j] 임의로 배열을 만들고 그 다음 k번 섞은 배열의 값을 임의의 배열의 값에 넣어 준다. 그리고 처음부터 끝까지 완료 해주었으면 k-1을 해주고 다시 반복해준다.
'백준' 카테고리의 다른 글
백준 17276 배열 돌리기 (JAVA) (0) | 2022.08.04 |
---|---|
백준 2615 오목 (JAVA) (0) | 2022.08.04 |
백준 17413 단어 뒤집기2(JAVA) (0) | 2022.07.20 |
백준 20291 파일 정리(JAVA) (0) | 2022.07.18 |
백준 20436 ZOAC 3 (JAVA) (0) | 2022.07.15 |