[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] AC (백준 5430, C++)

inu 2021. 4. 19. 19:52
반응형

AC

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

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net


접근 방식 및 풀이

  • deque을 활용하면 그렇게 어려운 문제를 아니었는데, 생각해줘야할 것이 많아 귀찮았다.
  • 그런데 그 귀찮은 것을 신경써주지 못해서 계속해서 제출에 실패했다.
  • 우선 입력값이 깔끔하게 주어지지 않았고, 출력값도 일반적이지 않았다.
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t;
    cin >> t;

    while(t) {
        string func;
        int length;
        string array_string;
        cin >> func;
        cin >> length;
        cin >> array_string;
        deque<int> dq;
        int error = 0;
        int flag = 1;

        int i = 1;
        while (array_string[i]!='\0'){
            int x = 0;
            while (array_string[i] >= '0' and array_string[i] <= '9') {
                x *= 10;
                x += int(array_string[i] - '0');
                i++;
            }
            if (x != 0) {
                dq.push_back(x);
            }
            i++;
        }

        i = 0;
        while (func[i]!='\0') {
            if (func[i] == 'R') flag = !flag;

            if (func[i] == 'D') {
                if (dq.empty()) {
                    error=1;
                    break;    
                }
                if (flag) {
                    dq.pop_front();
                } else {
                    dq.pop_back();
                }    
            }
            i++;
        }

        if (!error) {
            cout << "[";
        }
        while (!dq.empty()) { 
            if (flag) {
                auto c = dq.front();
                dq.pop_front();
                cout << c;
            }
            else {
                auto c = dq.back();
                dq.pop_back();
                cout << c;
            }
            if (!dq.empty()) {
                cout << ",";
            }
        }
        if (!error) {
            cout << "]\n";
        } else { 
            cout << "error\n";
        }

        t--;
    }
}
  • 먼저 반복문을 통해 주어진 입력값을 정상적으로 처리해주어야 했다.
  • deque를 활용해 R과 D를 구현하는 것은 쉬웠다. (flag 활용)
  • 마지막으로 error 여부를 처리해야 했다.
  • 문제해결 자체는 금방했는데 세부적인 부분을 빠르게 처리하지 못했다. 결국 시간이 많이흘러 다른 사람이 해결한 코드를 보고서야 해결했다.
  • 문제의 핵심을 해결하는 것도 중요하지만 입력과 출력 등 세부사항이 올바르게 이루어지도록 처리하는 것도 중요한 것 같다.
반응형