본문 바로가기

알고리즘/🥈 실버

백준 1021 회전하는 큐 자바 풀이

728x90

난이도 : 실버3

풀이일 : 07075

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

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import java.util.LinkedList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		int M = scan.nextInt();
		int shift = 0;
		
		LinkedList<Integer> queue = new LinkedList<>();
		
		// 1~N 큐 요소 추가 
		for (int i = 1; i <= N; i++) {
			queue.add(i);
		}
		
		for (int j = 0; j < M; j++) {
			// 제거할 숫자의 인덱스 저장
			int target = queue.indexOf(scan.nextInt());
			// 앞, 뒤 이동 방향 결정, 이동
			if (target < queue.size() - target) {
				for (int k = 0; k < target; k++) {
					queue.addLast(queue.poll());
					shift += 1;
				}
			}
			else {
				for (int k= 0; k < queue.size() - target; k++) {
					queue.addFirst(queue.pollLast());
					shift += 1;
				}
			}
			queue.remove();
		}
		System.out.println(shift);
	}
}

느낀점

며칠 동안 링크드 리스트를 활용해 비슷한 문제들을 해결하니까 많이 익숙해지고 있다.

그래도 아직 링크드 리스트 메서드들이 익숙하지는 않아서 날을 잡아 정리해봐야겠다.