본문 바로가기

백준

백준 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}$ 값을 $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