코테/백준

[백준/JAVA] 22858번: 원상 복구 (small)

imname1am 2023. 12. 31. 01:56
반응형

📖 문제

 

22858번: 원상 복구 (small)

$P_1, P_2, \cdots , P_N$의 수가 적혀 있는 $N$개의 카드가 있다. 1부터 N까지 수가 하나씩 존재하는 수열 $D_1, D_2, \cdots , D_i , \cdots , D_N$이 있다. 이때 각 $i$에 대해 $D_i$번째 카드를 $i$번째로 가져오는

www.acmicpc.net

 

 

💡  풀이 방식

• 구현, 시뮬레이션

. 임의의 배열을 생성하고, 그 다음 k번 섞은 배열의 값을 임의의 배열에 값으로 넣는다.

. 원래 배열에 값을 넣는다.

배열 D에서 {4,3,1,2,5}는 1번째 카드는 4번째로 옮겨야하고, 2번째 카드는 3번째로 옮겨야하고, 3번째 카드는 1번째로 옮겨야 한다. 나머지도 이렇게 진행

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;
import java.io.*;
 
public class Main {
    static int N, K;
    static int[] arr, D, tmp;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        N = Integer.parseInt(st.nextToken());   // 카드 개수
        K = Integer.parseInt(st.nextToken());   // 카드 섞은 횟수
        
        // K번 카드 섞은 배열
        arr = new int[N + 1];
        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 1 ; i <= N ; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        // D 배열
        D = new int[N + 1];
        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 1 ; i <= N ; i++) {
            D[i] = Integer.parseInt(st.nextToken());
        }
        
        while(K --> 0) {
            // 임의의 배열 생성
            tmp = new int[N + 1];
            
            // K번 섞은 배열의 값을 임의의 배열에 값에 넣음 (역순)
            for(int i = 1 ; i <= N ; i++) {
                tmp[D[i]] = arr[i]; // 예) arr의 1번째 카드는 4번째 위치로 이동해야 함
            }
 
            // 원래 배열에 넣음
            arr = tmp;
        }
        
        StringBuilder sb = new StringBuilder();
        for(int i = 1 ; i <= N ; i++) {
            sb.append(arr[i] + " ");
        }
        System.out.println(sb);
    }
}
 
cs

 

 

 


💦 어려웠던 점

- 문제 자체가 이해가 되지 않았다..

 

 

1회독 2회독 3회독 4회독 5회독
V 240611      

(참고)

 

백준 22858[자바] java 원상 복구 (small)

문제 링크: 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$

dingdingmin-back-end-developer.tistory.com

 

백준 22858 원상 복구(small) (JAVA)

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}$

goto-pangyo.tistory.com

 

반응형