문제: https://www.acmicpc.net/problem/1021
front 와 back 의 삽입과 삭제가 자유로운 std::list 을 이용해 풀어봤습니다.
my solving
c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <fstream> #include <iostream> #include <cstring> #include <climits> #include <algorithm> #include <queue> #include <list> using namespace std; list<int> numbers; void pushLeft() { int temp = numbers.front(); numbers.pop_front(); numbers.push_back(temp); } void pushRight() { int temp = numbers.back(); numbers.pop_back(); numbers.push_front(temp); } bool isLeftbetterThenRight(int target) { int count = 0; for (list<int>::iterator it = numbers.begin(); it != numbers.end(); it++) { count++; if (*it == target) break; } if (count <= numbers.size() / 2 + 1) return true; else return false; } int main() { int n, m; queue<int> needPopNumbers; cin >> n >> m; for (int i = 0; i < m; i++) { int num; cin >> num; needPopNumbers.push(num); } for (int i = 1; i <= n; i++) numbers.push_back(i); int ret = 0; while (needPopNumbers.empty() == false) { if (needPopNumbers.front() == numbers.front()) { needPopNumbers.pop(); numbers.pop_front(); } else { if (isLeftbetterThenRight(needPopNumbers.front())) pushLeft(); else pushRight(); ret++; } } cout << ret << endl; return 0; } | cs |
'Algorithm, Data structure > Solved Algorithmic Problem' 카테고리의 다른 글
BAEKJOON 1024 - 수열의 합 (0) | 2016.08.08 |
---|---|
BAEKJOON 1022 - 소용돌이 예쁘게 출력하기 (2) | 2016.08.04 |
BAEKJOON 1019 - 책 페이지 (0) | 2016.08.02 |
BAEKJOON 1018 - 체스판 다시 칠하기 (0) | 2016.08.02 |
BAEKJOON 1017 - 소수 쌍 (0) | 2016.08.01 |