본문 바로가기

알고리즘 문제풀이/백준

[백준][JAVA] 2605 - 줄 세우기

문제 출처 : https://www.acmicpc.net/problem/2605

 

2605번: 줄 세우기

점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을

www.acmicpc.net

 

 

 

문제

 

 

설명

난이도는 그렇게 높지 않은 문제로, 원하는 위치로 원소의 삭제 및 삽입이 가능한 ArrayList를 사용해서 인덱스 조작을 통해 문제를 해결했습니다.

문제에서 설명하는 것 그대로 구현해 주었는데, 먼저 학생이 뽑은 번호를 입력받은 다음 그 학생이 들어있는 곳을 인덱스를 통해 지웠습니다. 그런 다음, 학생이 뽑은 번호에 따라 그 학생을 앞으로 옮겨주는 작업을 전체 학생 수인 N번 반복하면 됩니다. 

 

 

 

 

코드

import java.util.ArrayList;
import java.util.Scanner;

public class BOJ2605_Queuing {
	public static void main(String[] args) {

		ArrayList<Integer> arr = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt(); //학생들의 수
		
		for(int i=1; i<=N; i++) {
			arr.add(i);
		} //학생들의 번호를 순서대로 arr에 저장
		
		for(int i=0; i<N; i++) {
			int n = sc.nextInt(); //학생이 뽑은 번호 (순서대로 뽑음)
			arr.remove(i); //먼저 학생 번호가 들어있는 곳을 지움
			arr.add(i-n, i+1); //학생이 뽑은 번호에 따라 학생을 앞으로 옮김
		}
        
		for(int i : arr) {
			System.out.print(i + " ");
		}
	}
}