백준 알고리즘 단계별로 풀어보기/스택

백준 알고리즘 9093번 단어 뒤집기(C언어)

MNMNWVWV 2023. 7. 11. 11:30
728x90
반응형
브론즈Ⅰ

 

 

https://www.acmicpc.net/problem/9093

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 32386 17010 12807 53.318%

 

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

예제 입력 1

2
I am happy today
We want to win the first prize

예제 출력 1

I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

 

풀이 방법

영어 알파벳을 차례대로 스택에 push하다가 공백(혹은 '\0')이 나왔을 때 스택에 있는 모든 알파벳을 pop 해주면 된다.

내 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
 
int top = -1;
int MAX = 20;
 
int isEmpty();
int isFull();
void push(char *stackchar data);
char pop(char*stack);
void pop_All(char* stack);
 
 
int main() {
 
    int n;
    char stack[21], str[1001];
 
    scanf("%d"&n);
    getchar();
    for (int i = 0; i < n; i++) {
        gets(str);
        for (int j = 0; j <= strlen(str); j++) {
            if (str[j] == ' ' || str[j] == '\0')
                pop_All(stack);
            else
                push(stack, str[j]);
        }
        printf("\n");
    }
    
 
    return 0;
}
 
int isEmpty() {
    if (top == -1)
        return 1;
    else
        return 0;
}
 
int isFull() {
    if (top >= MAX - 1)
        return 1;
    else
        return 0;
}
 
void push(char* stackchar data) {
    if (isFull() == 1)
        return;
    else {
        stack[++top] = data;
    }
}
 
char pop(char* stack) {
    if (isEmpty() == 1)
        return -1;
    else {
        return stack[top--];
    }
}
 
void pop_All(char* stack) {
    while (isEmpty() == 0) {
        printf("%c"pop(stack));
    }
    printf(" ");
}
cs
728x90
반응형