백준_회전하는 큐(1021번)

tth-k·2023년 8월 10일

0base_tth

목록 보기
3/9

문제

입출력 및 예제

코드작성

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt(); // 큐의 크기
        int M = scanner.nextInt(); // 뽑아내려는 원소의 개수


		// 1부터 N까지 반복문 실행 후 큐에 순차적으로 1~N까지의 숫자를 추가
        LinkedList<Integer> queue = new LinkedList<>();
        for (int i = 1; i <= N; i++) {
            queue.add(i);
        }
        
		//  뽑아내려는 원소의 값을 저장할 배열 생성 후 M번 반복하여 뽑아내려는 원소를 입력받고 원소값을 배열에 저장
        int[] targets = new int[M];
        for (int i = 0; i < M; i++) {
            targets[i] = scanner.nextInt();
        }
		
        // 뽑아내려는 원소들을 하나씩 반복하여 처리 → 무한루프시작
        // 큐에서 뽑아내려는 원소의 인덱스를 찾음
        // 큐의 반 크기를 계산
        int count = 0; // 뽑아내는 횟수를 저장할 변수 초기화
        for (int target : targets) {
            while (true) {
                int index = queue.indexOf(target);
                int halfSize = queue.size() / 2;
		
        
                if (queue.getFirst() == target) {
                    queue.pollFirst();
                    break;
                }

                if (index <= halfSize) {
                    queue.addLast(queue.pollFirst());
                } else {
                    queue.addFirst(queue.pollLast());
                }
                count++;
            }
        }
        System.out.println(count);
    }
}
profile
백엔드 취준생 / 코린이 ヾ(≧▽≦*)o

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

글 재미있게 봤습니다.

답글 달기