C언어/백준

12605: 단어 순서 뒤집기

road23 2022. 9. 11. 23:15

자료구조

브론즈 2

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

 

12605번: 단어순서 뒤집기

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만

www.acmicpc.net

 

-결과

 

-코드

#include <stdio.h>
 
void initialize(char* ch);
int main() {
    char ch[100] = { 0 }, * pch, * startp;
    pch = ch;
    int i = 0, pchidx = 0, case_num = 1;
    int startidx = 0, endidx = 0;
    int N;
    scanf("%d", &N);
    getchar();
 
    while (N--) {
 
        initialize(ch);
        pch = ch;
        pchidx = 0;
        scanf("%c", pch);
        while (*pch != '\n' && *pch != '.' && *pch != '!') {
            pch++;
            pchidx++;
            scanf("%c", pch);
        }
        printf("Case #%d: ", case_num);
        case_num++;
        endidx = pchidx - 1;
 
        for (i = pchidx - 1; i >= 0; i--) {
 
            if (i == 0) {
                startidx = i;
                for (int j = startidx; j <= endidx; j++) {
                    printf("%c", ch[j]);
                }
            }
            else if (ch[i] == ' ') {
                startidx = i;
                for (int j = startidx + 1; j <= endidx; j++) {
                    printf("%c", ch[j]);
                }
                printf(" ");
                endidx = startidx - 1;
            }
            
        }
        printf("\n");
    }
        return 0;
    
}
 
void initialize(char* ch) {
 
    for (int i = 0; i < 100; i++) {
        *ch = 0;
        ch++;
    }
}

 

-풀이

스페이스를 이용해서 단어와 단어를 구분지어야 한다.

그리고 문장의 단어들을 반대로 나열해야 하기 때문에 각 단어들의 start point와 end point 변수를 선언한 후에,

공백이 나타나면 각 포인트를 다시 이동해가면서 출력하도록 설정해야 한다.

그러기 위해서 배열을 사용하여 작성해야 한다. 

또한 getchar() 함수를 이용하여 \n가 올 때까지 문자를 입력받아 버퍼에 저장하도록 하여 단어를 분리하도록 해야한다.