728x90
반응형
문제 출처 : https://www.acmicpc.net/problem/1021
풀이
이 문제는 덱을 사용하는 문제이다.
2번 방법(왼쪽으로), 3번 방법(오른쪽으로) 중 짧은 거리를 구해서 해당 방법대로 push, pop을 반복한다.
이때 주의할 점은, left < right 인 경우 이동횟수가 +1이므로 최종 cnt에 1을 더해주어야 한다.
코드
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int N, M;
int ans;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> N >> M;
deque<int> dq;
int left, right;
int cnt = 0;
for(int i = 1; i <= N; i++)
dq.push_back(i);
while(M--) {
int num;
cin >> num;
for(int i = 0; i < dq.size(); i++) {
if(dq[i] == num) {
left = i;
right = dq.size() - i;
break;
}
}
if(left <= right) {
while(1) {
if(dq.front() == num)
break;
dq.push_back(dq.front());
dq.pop_front();
cnt++;
}
dq.pop_front();
}
else {
cnt++;
while(1) {
if(dq.back() == num)
break;
dq.push_front(dq.back());
dq.pop_back();
cnt++;
}
dq.pop_back();
}
}
cout << cnt << '\n';
return 0;
}
728x90
반응형
'Tech > Algorithm' 카테고리의 다른 글
[BOJ] 백준 1515 수 이어 쓰기 c++ (문자열, 구현) (0) | 2023.07.06 |
---|---|
[BOJ] 백준 18428 감시 피하기 c++ (백트래킹) (0) | 2023.07.05 |
[프로그래머스] 문자열 압축 c++ (level2) 2020 KAKAO BLIND RECRUITMENT (0) | 2023.06.12 |
[BOJ] 백준 6118 숨바꼭질 c++ (bfs) (0) | 2023.05.29 |
[프로그래머스] 네트워크 c++ java (dfs) Level3 (0) | 2023.05.05 |