본문 바로가기
Algorithm/📖Baekjoon

#5430 AC

by yewoneeee 2022. 6. 4.

# 문제

# 입력 및 출력

# 풀이

시간 제한은 1촌데 문자열로 입력받아서 뒤집는 연산을 하기엔 배열 길이 100,000까지여서 시간 초과가 걸릴 것 같았다

그래서 큐를 쓰려고 했는데 이것도 뒤집기 연산을 하려면 push pop이 너무 많아질 것 같았다그래서 앞뒤로 삽입 삭제 연산이되는 deque 자료구조를 쓰기로 했다

 

// 틀린 풀이
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main() {
	int T, N, num;
	char c;
	cin >> T;
	while (T--) {
		string cmd;
		deque<int> q;
		bool reverse = false, error = false;
		cin >> cmd >> N >> c;
		for (int i = 0; i < N; i++) {
			cin >> num >> c;
			q.push_back(num);
		}
		for (int i = 0; i < cmd.size(); i++) {
			if (cmd[i] == 'R') reverse = !reverse;
			else if (cmd[i] == 'D') {
				if (!q.empty()) {
					if (reverse) q.pop_back();
					else q.pop_front();
				}
				else error = true;
			}
		}
		if (error) cout << "error\n";
		else {
			cout << "[";
			while (!q.empty()) {
				if (reverse) {
					num = q.back();
					cout << num;
					q.pop_back();
				}
				else {
					num = q.front();
					cout << num;
					q.pop_front();
				}
				if (!q.empty()) cout << ",";
			}
			cout << "]\n";
		}
	}
}

4번의 수정을 통해 위 코드를 작성했다ㅋㅋㅋ

근데 자꾸 틀렸다고 나오더라,,

문제가 뭔가 했는데 cmd, N, c 입력받는 부분에서 문제가 생긴 것 같았다

 

이게 큰 문제가 되는진 모르겠는데

N에 0이 들어오면 [는 입력이 들어가는데 ]는 변수에 입력이 안된채로 남아있게 된다

 

그래서 배열을 문자열로 입력받아서 숫자만 덱에 push하는 형식으로 코드를 바꿨다

#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main() {
	int T, N, k;
	cin >> T;
	while (T--) {
		string cmd, str, num = "";
		deque<int> q;
		bool reverse = false, error = false;
		cin >> cmd >> N >> str;
		for (int i = 0; i < str.size(); i++) {
			if (isdigit(str[i])) {
				num += str[i];
			}
			else {
				if (!num.empty()) {
					q.push_back(stoi(num));
					num = "";
				}
			}
		}
		for (int i = 0; i < cmd.size(); i++) {
			if (cmd[i] == 'R') reverse = !reverse;
			else {
				if (!q.empty()) {
					if (reverse) q.pop_back();
					else q.pop_front();
				}
				else error = true;
			}
		}
		if (error) cout << "error\n";
		else {
			cout << "[";
			while (!q.empty()) {
				if (reverse) {
					k = q.back();
					q.pop_back();
				}
				else {
					k = q.front();
					q.pop_front();
				}
				cout << k;
				if (!q.empty()) cout << ",";
			}
			cout << "]\n";
		}
	}
}

이렇게 바꾸니까 잘 돌아가더라,,

수정 부분은 아래 블로그 참고

https://ongveloper.tistory.com/115

 

백준 5430 AC c++ (문자열,deque)

문제 출처 : https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.a

ongveloper.tistory.com

 

입력 버퍼에 괄호가 남아있게 돼서 그런가,,

이유는 잘 모르겠다

그래도 컴퓨터가 계산하는 것이기 때문에 이런 사소한 문제도 처리를 해줘야 할 것이다

 

 

알고리즘 자체는 쉬웠는데 정답률이 낮은 이유가 있었네ㅋㅋㅋ

'Algorithm > 📖Baekjoon' 카테고리의 다른 글

#16953 A → B  (0) 2022.06.06
#1010 다리 놓기  (0) 2022.06.05
#10799 쇠막대기  (0) 2022.06.03
#2606 바이러스  (0) 2022.06.03
#1339 단어 수학  (0) 2022.06.02

댓글