(1021번) 회전하는 큐

문제


문제 풀이

백준문제들은 문제를 해석을 하는 것이 매우 힘들다.. 문제 해석한 내용은 아래와 같다.

 

처음에는 사이즈가 4인 큐가 있다.

1. 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다.

2. 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다.

3. 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다.

 

여기서 1번으로 무조건 poll을 하고 2,3 번으로 위치를 바꿀 때 뽑아야 하는 값들을 다 뽑을 때까지 2,3번 규칙을 몇번을 수행했느냐를 반환하면 된다. 

 

 


나의 답안

덱을 구현하는데 LinkedList를 이용하였다. 원하는 값을 찾을 때는 indexOf 함수를 사용하여 인덱스 값을 구하였고 해당 인덱스 값이 덱의 전체 길이 / 2 보다 작냐 크냐에 따라 원하는 조건문을 수행하도록 하였다. 

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.nextLine();
        String s2 = scanner.nextLine();

        int[] arrA = Arrays.stream(s1.split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] arrB = Arrays.stream(s2.split(" ")).mapToInt(Integer::parseInt).toArray();

        System.out.println(check(arrA, arrB));
    }

    public static int check(int[] arrA, int[] arrB) {
        int count = 0;
        int target;
        LinkedList<Integer> deque = new LinkedList<>();
        int[] arrFind = arrB.clone();

        for (int i = 1; i <= arrA[0]; i++) {
            deque.offer(i);
        }


        for (int i = 0; i < arrFind.length; i++) {
            target = deque.indexOf(arrFind[i]);
            int half = deque.size() / 2;
            if (target <= half) {
                while (target != 0) {
                    deque.offerLast(deque.pollFirst());
                    target--;
                    count++;
                }
            } else {
                while (target != deque.size()) {
                    deque.offerFirst(deque.pollLast());
                    target++;
                    count++;
                }
            }
            deque.pollFirst();
        }


        return count;
    }
}

'BackJoon > Algorithm' 카테고리의 다른 글

(9012)괄호  (0) 2023.03.21
(24174) 알고리즘 수업 - 힙 정렬 2  (1) 2023.03.19
(1158) 요세푸스 문제  (0) 2023.03.17
(10818) 최소, 최대  (0) 2023.03.15
(25556번) 포스택  (0) 2023.03.13