ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€(BOJ) 1021번] νšŒμ „ν•˜λŠ” 큐 (C++)
    PS(Problem Solving)/C++ 2022. 1. 18. 23:14
    λ°˜μ‘ν˜•

    문제 링크

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

     

    문제 정보

    μž…λ ₯

    첫째 쀄에 큐의 크기 Nκ³Ό 뽑아내렀고 ν•˜λŠ” 수의 개수 M이 주어진닀. N은 50보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄κ³ , M은 N보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. λ‘˜μ§Έ μ€„μ—λŠ” 지민이가 뽑아내렀고 ν•˜λŠ” 수의 μœ„μΉ˜κ°€ μˆœμ„œλŒ€λ‘œ 주어진닀. μœ„μΉ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , N보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

    좜λ ₯

    첫째 쀄에 문제의 정닡을 좜λ ₯ν•œλ‹€.

     

    풀이

     λ¬Έμ œλ₯Ό μ΄ν•΄ν•˜λŠ” 것이 μƒλ‹Ήνžˆ νž˜λ“€μ—ˆλ‹€. μ–‘λ°©ν–₯ μˆœν™˜ νλΌλŠ” 것을 톡해 덱을 μ΄μš©ν•΄μ„œ 풀이할 수 μžˆλ‹€λŠ” 것을 생각할 수 μžˆλ‹€. μ˜ˆμ‹œλ₯Ό λ“€μ–΄μ„œ 문제λ₯Ό μ΄ν•΄ν•΄λ³΄μž. λ§Œμ•½ n = 10μ—μ„œ 4λ₯Ό 뽑아야 ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.

     λ± : 1 2 3 4 5 6 7 8 9 10

     μ—¬κΈ°μ—μ„œ 4λ₯Ό 뽑을렀면 μ™Όμͺ½μœΌλ‘œ μ΄λ™ν•΄μ„œ λ½‘λŠ” 2번 연산이 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜λŠ” 3번 연산보닀 더 적은 횟수둜 4λ₯Ό μΆ”μΆœν•  수 μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. 이λ₯Ό 톡해 덱에 λ“€μ–΄μžˆλŠ” μ›μ†Œμ˜ 개수(size)의 절반 보닀 μ•žμ— 있으면 2번 연산이 더 적은 횟수둜 μΆ”μΆœν•  수 있고, μ•„λ‹ˆλΌλ©΄ 3번 연산이 더 적은 횟수둜 μΆ”μΆœν•  수 μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

     

    μ†ŒμŠ€ μ½”λ“œ

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	
    	int n, m;
    	cin >> n >> m;
    	
    	deque<int> DQ;
    	
    	for (int i = 1; i <= n; i++) {
    		DQ.push_back(i);
    	}
    	
    	int ans = 0;
    	
    	while (m--) {
    		int num;
    		cin >> num;
    		
    		int idx = 0;
    		for (int i = 0; i < DQ.size(); i++) {
    			if (DQ[i] == num) {
    				idx = i;
    				break;
    			}
    		}
    		
    		if (idx <= DQ.size() / 2) { // 덱의 μ ˆλ°˜λ³΄λ‹€ μ•žμ— 있으면 2번 연산이 더 빠름.
    			for (int i = 0; i < idx; i++) {
    				DQ.push_back(DQ.front());
    				DQ.pop_front();
    				ans++;
    			}
    			DQ.pop_front();
    		} else { // 덱의 μ ˆλ°˜λ³΄λ‹€ 뒀에 있으면 3번 연산이 더 빠름.
    			for (int i = 0; i < DQ.size() - idx; i++) {
    				DQ.push_front(DQ.back());
    				DQ.pop_back();
    				ans++;
    			}
    			DQ.pop_front();
    		}
    	}
    	
    	cout << ans;
    	
    	return 0;
    }

     

    λ°˜μ‘ν˜•
Designed by Tistory.