πŸ’»

[λ°±μ€€] 큐,덱 - 18258. 큐 2 λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Baekjoon

[λ°±μ€€] 큐,덱 - 18258. 큐 2

λ˜νš¨λ‹ˆ 2020. 1. 31. 20:10

문제

이 λ¬Έμ œλŠ” μ—¬λŸ¬λΆ„μ΄ μ‚¬μš©ν•˜λŠ” 큐 μžλ£Œκ΅¬μ‘°κ°€ μ‹œκ°„ λ³΅μž‘λ„ μƒμœΌλ‘œ μΆ©λΆ„νžˆ λΉ λ₯Έμ§€ ν…ŒμŠ€νŠΈν•˜λŠ” λ¬Έμ œμ΄λ‹€. μž…λ ₯의 λ²”μœ„λ₯Ό μ œμ™Έν•˜λ©΄ 

10845 (큐) λ¬Έμ œμ™€ κ°™λ‹€.

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 큐λ₯Ό κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 μ—¬μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό 큐에 λ„£λŠ” 연산이닀.
  • pop: νμ—μ„œ κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: 큐가 λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • front: 큐의 κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • back: νμ˜ κ°€μž₯ 뒀에 μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 2,000,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© 주어진닀. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

 

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

 

예제 좜λ ₯1

1
2
2
0
1
2
-1
0
1
-1
0
3

 

생각

큐 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ ν’€λ¦¬λŠ” λ¬Έμ œλ‹€. 10845 번 λ¬Έμ œμ™€ λ™μΌν•˜κ²Œ μž‘μ„±ν•΄λ„ μ‹œκ°„μ œν•œμΈ 1초 이내가 λ‚˜μ˜€λŠ” λ¬Έμ œμ˜€λ‹€.

380msκ°€ λ‚˜μ™”μ§€λ§Œ 더 쀄일 수 μ—†μ„κΉŒν•˜μ—¬ 생각을 ν•΄λ΄€λŠ”λ°, 쑰건뢀 μ—°μ‚°μž(μ‚Όν•­μ—°μ‚°μž)λ₯Ό μ‚¬μš©ν•΄μ„œ μ½”λ“œ 길이λ₯Ό 쑰금 μ€„μ—¬λ΄€λŠ”λ° μ œμΆœν–ˆλ”λ‹ˆ λ˜‘κ°™μ€ λ©”λͺ¨λ¦¬μ™€ μ‹œκ°„μ΄ λ‚˜μ™”λ‹€. 

λ§žμ€ μ‚¬λžŒλ“€ 풀이λ₯Ό λ΄λ³΄λ‹ˆ ν¬μΈν„°ν•¨μˆ˜λ₯Ό μ“΄ μ‚¬λžŒλ„ 있고 ν–ˆλŠ”λ° μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ„œ κ·Έλ‚˜λ§ˆ ν™œμš©ν•  수 μžˆλŠ” λ‹€λ₯Έ μ½”λ“œλ₯Ό λ³΄μ•˜λ”λ‹ˆchar 배열을 μ‚¬μš©ν•œ ν’€μ΄λ²•μ΄μ—ˆλ‹€. μ‹œλ„ν–ˆλ”λ‹ˆ μ‹œκ°„μ΄ 348ms으둜 쀄일 수 μžˆμ—ˆλ‹€.  

 

 

μž‘μ„±ν•œ μ½”λ“œ

#include <iostream>
#include <queue>
using namespace std;

int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    queue<int> q;
    int n;
    int num;
    char s[7];

    cin >> n;
    for(int i=0; i<n; i++){
        cin >> s;
        if(s[1]=='u'){
            cin >> num;
            q.push(num);
        }else if(s[1]=='o'){
            if(!q.empty()){
                cout << q.front() <<"\n";
                q.pop();
            }else{
                cout << -1 << "\n";
            }
        }else if(s[1]=='i'){
            cout << q.size() << "\n";
        }else if(s[1]=='m'){
            cout << (q.empty() ? 1:0) << "\n";
        }else if(s[1]=='r'){
            cout << (q.empty() ? -1:q.front()) <<"\n";
        }else if(s[1]=='a'){
            cout << (q.empty() ? -1:q.back()) << "\n";
        }
    }
    return 0;
}

 

 

 

λ°˜μ‘ν˜•
Comments