[백준] 9093번: 단어 뒤집기 (C언어)

728x90
728x90

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

 

9093번: 단어 뒤집기

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

www.acmicpc.net

난이도: solved.ac 브론즈 5

 

stack이라는 이름의 문자열을 이용해 단어를 담아주었는데,

 

단어의 길이는 최대 20이라서 21칸짜리로 선언하였다

 

그리고 스택의 top부터 꺼내면 입력과 거꾸로 된 형태로 출력할 수 있다는 스택의 성질을 이용하였다

 

scanf 특성 때문인지 visual studio에서는 실행이 제대로 안되길래

 

dev c++로 실행해 보니 제대로 실행되었다

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define MAX_LEN 1001

int main() {
    int T, t, i, j;    // T: 테스트 케이스
    scanf("%d ", &T);
    char string[MAX_LEN];
    char stack[21];
    int top = 0, len;

    for (t = 0; t < T; t++) {
        fgets(string, MAX_LEN, stdin);
        len = strlen(string);
        for (i = 0; i < len - 1; i++) {
            /* strlen(string) - 1까지인 이유 : 문자열 끝에는 '\0'이 들어가므로 */
            if (string[i] != ' ')
                stack[top++] = string[i];

            if (string[i] == ' ' || i == len - 2) {
                /* 빈칸(띄어쓰기)이거나 마지막 글자일 때 */
                for (j = top - 1; j >= 0; j--)
                    printf("%c", stack[j]);
                printf(" ");
                top = 0;
            }
        }
        printf("\n");
    }
    return 0;
}
반응형