728x90
728x90
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
난이도: solved.ac 골드 5
일단 수를 배열에 저장시키고, front와 rear라는 커서를 둬서 R이면 front와 rear의 위치를 서로 바꾸고 D면 front를 한 칸 이동시키는 식으로 풀었다
그리고 front와 rear 사이에 수가 없는데 D를 하면 error를 출력하도록 해주었다
수를 배열에 담을 때는 '['와 ']'를 따로 입력받고, 수는 콤마(,)로 구분해서 입력받았다
#define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> int arr[100001]; char p[100001]; int main() { int i, T, n; scanf("%d", &T); while (T--) { scanf("%s", p); scanf("%d", &n); char garb; scanf(" %c", &garb); // '['를 입력 받는 용도 for (i = 0; i < n; i++) scanf("%d,", &arr[i]); // ','로 구분 scanf(" %c", &garb); // ']'를 입력 받는 용도 // 배열에 들어있는 수는 front와 rear 사이에 있는 수임 int front = -1, rear = n; int len_p = strlen(p), cur = 0; for (cur = 0; cur < len_p; cur++) { if (p[cur] == 'R') { // front와 rear 위치 서로 바꾸기 int temp = front; front = rear; rear = temp; } else if(p[cur] == 'D') { if (front == rear - 1 || rear == front - 1) { // front와 rear 사이의 수가 없으면 break break; } else if (front < rear) front++; else front--; } } // cur < len_p인 경우: 배열이 비어있는데 D한 경우 if (cur < len_p) { // error 출력하고 다음 테스트 케이스로 printf("error\n"); continue; } printf("["); if (front < rear) { if (front == rear - 1) { // 사이의 수가 없을 때 printf("]\n"); continue; } while (front < rear - 2) { // 마지막 원소는 뒤에 ','를 붙이지 않으므로 따로 처리 printf("%d,", arr[front + 1]); front++; } // 마지막 원소 printf("%d]\n", arr[front + 1]); } else { if (rear == front - 1) { // 사이의 수가 없을 때 printf("]\n"); continue; } while (rear < front - 2) { // 마지막 원소는 뒤에 ','를 붙이지 않으므로 따로 처리 printf("%d,", arr[front - 1]); front--; } // 마지막 원소 printf("%d]\n", arr[front - 1]); } } }

반응형