자료구조/문제풀이

[백준 JAVA] 1138 한 줄로 서기

휴먼코딩 2024. 9. 21. 05:36

1138 한 줄로 서기

https://www.acmicpc.net/problem/1138

문제설명

n개의 정수(1부터 n까지의 값)를 포함하는 배열을 받고 각 정수의 값에 해당하는 인덱스를 기록하여 출력한다.

 

예를 들어, 입력이 [3, 1, 4, 2]라면, 값이 3인 위치(1-based index)는 1

값이 1인 위치는 2, 값이 4인 위치는 3, 값이 2인 위치는 4가 된다.

접근방식

O(n) 선형 시간복잡도

입력받은 만큼 배열의 내용을 출력한다.

 

문제 조건 분석 과정

  • 배열에 각 정수의 값(인덱스)에 해당하는 위치를 저장한다.
  • 배열을 순회하며 결과를 출력한다.

전체코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] tall = new int[n + 1];
        List<Integer> ans = new ArrayList<>();

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= n; i++) {
            tall[i] = Integer.parseInt(st.nextToken());
        }

        for (int i = n; i >= 1; i--) {
            ans.add(tall[i], i);
        }

        for (int k : ans) {
            System.out.print(k + " ");
        }
    }
}