PS/Baekjoon Online Judge

[백준 5430] AC [C]

kimyoungrok 2021. 8. 9. 20:19

백준 - 5430


풀이

입력부터 애먹은 문제다. "[ , , ]"를 문자열로 입력받아서 해결해도 되지만, 정수만 입력받기 위해 ' [ ', ' ] '가 입력될 때는 getchar()로 buffer를 비워 다음 입력에 영향이 안가도록 했다.

getchar();
for (int i = 0; i < n; i++) scanf("%d,", &x[i]);
getchar();

 

error가 뜨는 경우는 다음과 같다.

  • n = 0일 때
  • n = 0이 아니지만, p에 입력받은 D의 개수보다 n이 작을 때

2번째 조건을 확인하기 위해 n을 감소시켜 반복문이 끝나기 전에 1번째 조건으로 유도하는 방법으로 구현했다. 

for (int i = 0; p[i] != '\0'; i++){
    if (p[i] == 'R') reverse = reverse ? 0 : 1;
        else {
            if (!n){
                error++;
                break;
            }
            !reverse ? (front++) : (rear--);
            n--;
        }
}

 

명령을 끝낸 후 남은 정수들이 전부 0인지(비어있는지) 확인해야 한다는 점에 유의하자.


소스코드

#include <stdio.h>
char p[100001], x[100001];
int all_zero(int front, int rear){
    for (int i = front; i <= rear; i++)
        if (x[i]) return 0;
    return 1;
}
int main(){
    int T, n;
    scanf("%d", &T);
    while (T--){
        int error = 0, reverse = 0;
        scanf("%s %d ", p, &n);
        int front = 0, rear = n-1;
		
        getchar();
        for (int i = 0; i < n; i++) scanf("%d,", &x[i]);
        getchar();
		
        for (int i = 0; p[i] != '\0'; i++){
            if (p[i] == 'R') reverse = reverse ? 0 : 1;
            else {
                if (!n){
                    error++;
                    break;
                }
                !reverse ? (front++) : (rear--);
                n--;
            }
        }
        if (error) puts("error");
        else if (all_zero(front, rear)) puts("[]");
        else {
            putchar('[');
            if (!reverse)
                for (int i = front; i <= rear; i++)
                    printf("%d%c", x[i], i == rear ? ']' : ',');
            else 
                for (int i = rear; i >= front; i--)
                    printf("%d%c", x[i], i == front ? ']' : ',');
            putchar(10);
        }
    }
}

출처

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 15652] N과 M (4) [C]  (0) 2021.08.10
[백준 1788] 피보나치 수의 확장 [C]  (0) 2021.08.10
[백준 15650] N과 M (2) [C]  (0) 2021.08.09
[백준 9461] 파도반 수열 [C]  (0) 2021.08.09
[백준 1780] 종이의 개수 [C]  (0) 2021.08.09