Algorithm

[백준] 1015. 수열 정렬(Java)

거북목을 가진 김기린 2024. 4. 25. 22:41
728x90
반응형

문제

 

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

풀이

문제가 이해가 잘 되지는 않았지만, 예제의 입력과 출력을 보고 이해했다.

 

원본 A 배열과, 원본을 오름차순 정렬한 B를 이용하여

2중 for문을 통해 순회하면서

A와 B의 값이 같아지는 부분의 B 인덱스를 순차적으로 출력해주면 된다.(문제에서 원하는 답)

그리고 B인덱스는 방문 처리를 해주어 한 번만 출력하게 만들면 된다.

코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[] A = new int[N];
        int[] B = new int[N];
        boolean[] v = new boolean[N];

        st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < N ; i ++){
            A[i] = Integer.parseInt(st.nextToken());
            B[i] = A[i];
        }

        Arrays.sort(B);

        for(int i = 0 ; i < N ; i ++){
            for (int j = 0; j < N; j++) {
                if (v[j] || A[i] != B[j]) continue;

                v[j] = true;
                sb.append(j).append(" ");
                break;
            }
        }

        System.out.println(sb);
    }
}
728x90
반응형