Search
Duplicate
📗

AC

주차
20
문제번호
5430
언어
티어
골드
유형
구현
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

덱 이용하여 입력 받은 문자열 중에서 숫자만 덱에 저장
flag변수 를 통하여 R 입력을 업데이트한다
flag = -1이면 pop_front()로 앞에서 출력
flag = 1 이면 pop_back()로 뒤에서 출력

놓쳤던 부분

만약 이 글을 보고 계시는 분께서...50%에서 틀린다고 나온다면 아래의 경우들을 확인해보세용..
1.
두자리수 이상의 값들도 잘 받는지(ex) [12,23,34,45] [123,234,345,456]
2.
비어있는 배열에 대해서 error 출력이 아닌 [] 출력을 올바르게 하는지
(ex)
//입력 1 R 0 [] //출력 []
C
복사
get_num함수에서 포인터 활용이 잘못 되었음
(*index)의 값을 증가시켜야하는데((*index)++) 포인터 주소를 (*index++) 증가 시키는 치명적인 문제를...

코드

6100 KB

52 ms

#include <iostream> #include <deque> int T; std::string p; int n; std::string x; std::deque<std::string> num; int flag = -1; void input_setting() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::cin >> T; } void get_num(int *index, int len) { std::string str; str = ""; while (*index < len && x[*index] >= '0' && x[*index] <= '9') str += x[(*index)++]; num.push_back(str); } void find_num() { int len = x.length(); for (int i = 0; i < len; i++) if (x[i] >= '0' && x[i] <= '9') get_num(&i, len); } void print() { std::cout << "["; while (!num.empty()) { if (flag == -1) { std::cout << num.front(); num.pop_front(); } else { std::cout << num.back(); num.pop_back(); } if (num.empty()) break ; std::cout << ","; } if (num.empty()) std::cout << "]" << "\n"; } void solution() { int p_len; for (int i = 0; i < T; i++) { std::cin >> p; std::cin >> n; std::cin >> x; p_len = p.length(); flag = -1; find_num(); for (int i = 0; i < p_len; i++) { if (p[i] == 'R') flag *= -1; else if (p[i] == 'D' && flag == -1) { if (num.empty()) { std::cout << "error\n"; break ; } num.pop_front(); } else { if (num.empty()) { std::cout << "error\n"; break ; } num.pop_back(); } if (i + 1 == p_len) print(); } } } int main(void) { input_setting(); input(); solution(); return (0); }
C++
복사