/ BOJ

BOJ_2605_줄세우기_JAVA

문제 : 줄세우기

링크 : BOJ_2605_줄세우기

접근 방식

링크드리스트를 이용하여 숫자를 도중에 삽입하면 되는 문제이다.

링크드리스트에 먼저 숫자를 차례대로 받고, 해당 숫자에 주어진 수 만큼 앞으로 당긴다. 그리고 모든 숫자를 받은 후에 학생이 들어온 순번을 차례대로 출력한다.

풀이 방법

  1. 제네릭으로 int형 배열의 링크드리스트를 선언한다.

  2. N만큼 반복하며 배열로 0번 인덱스에는 학생의 들어온 순번을, 1번 인덱스에는 학생이 뽑은 숫자를 넣는데, 학생이 뽑은 숫자만큼 기존 인덱스에서 - 하여 중간에 삽입해준다.

  3. 완성된 리스트를 차례대로 출력한다.

소스 코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class BOJ_2605_줄세우기 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(in.readLine());

		LinkedList<int[]> list = new LinkedList<>();
		StringTokenizer st = new StringTokenizer(in.readLine()," ");
		for(int i=0;i<N;i++) {
			int num = Integer.parseInt(st.nextToken());
			list.add(i-num,new int[]{i+1, num});
		}
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<N;i++) {
			sb.append(list.get(i)[0]).append(" ");
		}

		System.out.println(sb);

	}
}