BOJ_2605_줄세우기_JAVA
문제 : 줄세우기
링크 : BOJ_2605_줄세우기
접근 방식
링크드리스트를 이용하여 숫자를 도중에 삽입하면 되는 문제이다.
링크드리스트에 먼저 숫자를 차례대로 받고, 해당 숫자에 주어진 수 만큼 앞으로 당긴다. 그리고 모든 숫자를 받은 후에 학생이 들어온 순번을 차례대로 출력한다.
풀이 방법
-
제네릭으로 int형 배열의 링크드리스트를 선언한다.
-
N만큼 반복하며 배열로 0번 인덱스에는 학생의 들어온 순번을, 1번 인덱스에는 학생이 뽑은 숫자를 넣는데, 학생이 뽑은 숫자만큼 기존 인덱스에서 - 하여 중간에 삽입해준다.
-
완성된 리스트를 차례대로 출력한다.
소스 코드
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);
}
}