본문 바로가기

PS/백준

[BOJ] 백준 1021 회전하는 큐 (Swift)

728x90
반응형

문제

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

 

1021번: 회전하는 큐

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

www.acmicpc.net

풀이

Deque 자료구조를 사용해서 풀 수 있는 문제입니다.
n이 최대 50이기 때문에, $O(n)$인 removeFirst, insert 메서드를 사용해서 구현할 수 있습니다.

편의성을 위해 1부터 n까지의 array를 담아주고,
뽑아내려고 하는 수의 위치를 입력받는데, 1부터 n까지 array에 담아주었기 때문에 위치가 아닌 값을 가지고 비교하여도 무방합니다.

모든 수를 뽑아낼 때 까지 반복하고,
배열의 첫번째 수가 뽑아내려는 수라면 뽑고,
그게 아니라면
앞에서부터 뽑아내려는 수가 가까운지, 뒤에서부터 뽑아내려는 수가 가까운지 firstIndex 메서들르 사용해 확인해줍니다.

앞에서부터 가깝다면 2번 연산 (왼쪽으로 한칸 이동)
뒤에서부터 가깝다면 3번 연산 (오른쪽으로 한칸 이동)

을 수행해주면 됩니다.

2번, 3번 연산을 수행할 때, 횟수를 기록하고 모두 뽑아냈다면 반복문을 탈출한 후 횟수를 출력해주면 됩니다.

소스코드

후기

n의 크기가 컷다면 $O(n)$인 removeFirst, insert를 사용하지 않는 방식으로 구현해야할 것입니다.
하지만 n의 크기가 작기 때문에 간단하게 구현할 수 있습니다.

728x90
반응형

'PS > 백준' 카테고리의 다른 글

[BOJ] 백준 15651 N과 M (3) (Swift)  (0) 2023.04.04
[BOJ] 백준 5430 AC (Swift)  (2) 2023.04.04
[BOJ] 백준 10866 덱 (Swift)  (0) 2023.04.04
[BOJ] 백준 1966 프린터 큐 (Swift)  (0) 2023.04.04
[BOJ] 백준 11866 요세푸스 문제 0 (Swift)  (0) 2023.04.03