[회고] 신입 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 여부를 처리해야 했다.
  • 문제해결 자체는 금방했는데 세부적인 부분을 빠르게 처리하지 못했다. 결국 시간이 많이흘러 다른 사람이 해결한 코드를 보고서야 해결했다.
  • 문제의 핵심을 해결하는 것도 중요하지만 입력과 출력 등 세부사항이 올바르게 이루어지도록 처리하는 것도 중요한 것 같다.