728x90
SMALL
백준 문제 풀이: 5430 [AC]
문제 링크: https://www.acmicpc.net/problem/5430
문제 설명:
주어진 R(뒤집기)와 D(버리기) 연산을 사용하여 배열을 조작합니다. 배열이 비어 있는 상황에서 D를 호출하거나 유효하지 않은 연산이 발생하면 "error"를 출력해야 합니다. 최종 배열의 상태를 출력하세요.
입력 조건:
- 첫 번째 줄에 테스트 케이스의 개수 T가 주어집니다. (1 ≤ T ≤ 100)
- 각 테스트 케이스마다:
- 수행할 함수 p (최대 100,000자)
- 배열의 크기 n (0 ≤ n ≤ 100,000)
- 배열 x가 주어집니다. (x는 대괄호로 감싸져 있으며, 각 숫자는 최대 100)
출력 조건:
- 각 테스트 케이스에 대해 결과 배열 또는 "error"를 출력합니다.
문제 해결 코드
#include <iostream>
#include <deque>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin >> T;
while (T--) {
string p, arr;
int n;
cin >> p >> n >> arr;
deque<int> d;
string num = "";
for (int i = 1; i < arr.size(); i++) { // 배열 파싱
if (arr[i] == ',' || arr[i] == ']') {
if (!num.empty()) {
d.push_back(stoi(num));
num = "";
}
} else if (isdigit(arr[i])) {
num += arr[i];
}
}
bool reversed = false, error = false;
for (char cmd : p) {
if (cmd == 'R') {
reversed = !reversed; // 뒤집기 상태 전환
} else if (cmd == 'D') {
if (d.empty()) {
error = true; // 비어 있는 배열에서 D 연산 시 에러 발생
break;
}
if (reversed) {
d.pop_back();
} else {
d.pop_front();
}
}
}
if (error) {
cout << "error\n";
} else {
cout << "[";
while (!d.empty()) {
if (reversed) {
cout << d.back();
d.pop_back();
} else {
cout << d.front();
d.pop_front();
}
if (!d.empty()) cout << ",";
}
cout << "]\n";
}
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 `deque` 자료구조를 활용하여 배열을 효율적으로 조작합니다.
- 입력 처리:
- 배열 파싱: 주어진 배열 문자열에서 숫자를 추출하여 `deque`에 저장합니다.
- 명령 처리:
- `R`: 뒤집기 상태를 `reversed` 변수로 관리합니다.
- `D`: 배열의 앞 또는 뒤에서 원소를 제거합니다. 배열이 비어 있는 경우 "error"를 출력합니다.
- 결과 출력:
- `deque`의 내용을 출력하며 뒤집기 상태에 따라 앞이나 뒤에서 접근합니다.
시간 복잡도 분석:
- 배열 파싱: O(n).
- 명령 처리: O(p), p는 함수의 길이.
전체 시간 복잡도는 O(T × (n + p))이며, 입력 제한 내에서 효율적으로 처리할 수 있습니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
2
RDD
4
[1,2,3,4]
DD
1
[42]
출력:
[2,1]
error
주어진 명령에 따라 배열이 올바르게 조작되고 결과가 출력됩니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 자료 구조' 카테고리의 다른 글
백준 9375번 [패션왕 신해빈](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
---|---|
백준 7662번 [이중 우선순위 큐](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
백준 1927번 [최소 힙](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
백준 1764번 [듣보잡](C++) -yes6686- 티스토리 (0) | 2024.12.24 |
백준 1620번 [나는야 포켓몬 마스터 이다솜](C++) -yes6686- 티스토리 (0) | 2024.12.24 |