Algorithm/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ / c++] μ΄μ€‘μš°μ„ μˆœμœ„ν 풀이

meeeeejin 2020. 7. 29. 02:15

문제

 

<문제 μ„€λͺ…>

이쀑 μš°μ„ μˆœμœ„ νλŠ” λ‹€μŒ 연산을 ν•  수 μžˆλŠ” 자료ꡬ쑰λ₯Ό λ§ν•©λ‹ˆλ‹€.

 

λͺ…λ Ήμ–΄μˆ˜μ‹  탑(높이)
I 숫자 큐에 주어진 숫자λ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€.
D 1 νμ—μ„œ μ΅œλŒ“κ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€.
D -1 νμ—μ„œ μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€.

 

이쀑 μš°μ„ μˆœμœ„ 큐가 ν•  μ—°μ‚° operationsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λͺ¨λ“  연산을 μ²˜λ¦¬ν•œ ν›„ 큐가 λΉ„μ–΄μžˆμœΌλ©΄ [0,0] λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ [μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’]을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ£Όμ„Έμš”.

 

 

<μ œν•œμ‚¬ν•­>

  • operationsλŠ” 길이가 1 이상 1,000,000 μ΄ν•˜μΈ λ¬Έμžμ—΄ λ°°μ—΄μž…λ‹ˆλ‹€.
  • operations의 μ›μ†ŒλŠ” 큐가 μˆ˜ν–‰ν•  연산을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • μ›μ†ŒλŠ” “λͺ…λ Ήμ–΄ 데이터” ν˜•μ‹μœΌλ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€.- μ΅œλŒ“κ°’/μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•˜λŠ” μ—°μ‚°μ—μ„œ μ΅œλŒ“κ°’/μ΅œμ†Ÿκ°’μ΄ λ‘˜ 이상인 경우, ν•˜λ‚˜λ§Œ μ‚­μ œν•©λ‹ˆλ‹€.
  • 빈 큐에 데이터λ₯Ό μ‚­μ œν•˜λΌλŠ” 연산이 μ£Όμ–΄μ§ˆ 경우, ν•΄λ‹Ή 연산은 λ¬΄μ‹œν•©λ‹ˆλ‹€.

 

 

https://programmers.co.kr/learn/courses/30/lessons/42628

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ΄μ€‘μš°μ„ μˆœμœ„ν

 

programmers.co.kr

 

 

 

 

문제 풀이

 

dequeλ₯Ό μ΄μš©ν•΄μ„œ μ΅œλŒ“κ°’μ„ μ‚­μ œν•  λ•ŒλŠ” pop_back(), μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•  λ•ŒλŠ” push_back()을 ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.  

 

 

 

 

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

 

// μ΄μ€‘μš°μ„ μˆœμœ„ν
#include <iostream>
#include <vector>
#include <deque>
#include <string>
#include <algorithm>

using namespace std;

vector<int> solution(vector<string> operations) {
    vector<int> answer = { 0, 0 };
    deque<int> dq;
    char op;    // λͺ…λ Ήμ–΄
    int num;    // 데이터

    for (int i = 0; i < operations.size(); i++) {
        op = operations[i][0];
        num = stoi(operations[i].substr(2));

        // 큐에 주어진 숫자λ₯Ό μ‚½μž…
        if (op == 'I') {
            dq.push_back(num);
            sort(dq.begin(), dq.end());
        }
        // 큐가 λΉ„μ–΄μžˆμ§€ μ•Šμ„ 경우 값을 μ‚­μ œ
        else if(!dq.empty()) {
            // μ΅œλŒ“κ°’ μ‚­μ œ
            if (num == 1)
                dq.pop_back();
            // μ΅œμ†Ÿκ°’ μ‚­μ œ
            else
                dq.pop_front();
        }
    }

    // 큐가 λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ [μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’] answer에 μ €μž₯
    if (!dq.empty()) {
        answer[0] = dq.back();
        answer[1] = dq.front();
    }

    return answer;
}

 

 

 

 

κ³΅λΆ€ν•œ 것을 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μˆ˜μ •ν•  뢀뢄이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

 

 

728x90