728x90
반응형
브론즈Ⅰ
https://www.acmicpc.net/problem/9093
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
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 *stack, char 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* stack, char 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
반응형
'백준 알고리즘 단계별로 풀어보기 > 스택' 카테고리의 다른 글
백준 알고리즘 17608번 막대기(C++) (0) | 2023.07.14 |
---|---|
백준 알고리즘 10828번 스택 (C언어) (0) | 2023.04.30 |