파게로그

[백준 17413번] 단어 뒤집기 2 본문

콤퓨타 왕왕기초/PS

[백준 17413번] 단어 뒤집기 2

파게 2021. 4. 8. 04:45

문제 링크: 17413번 단어 뒤집기 2

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

 

문제에서 시키는 대로 한다. string1은 입력 문자열이고, string2는 입력 문자열이며 idx1string1에 대한 인덱스이고, idx2string2에 대한 인덱스이다. 다른 것보다 인덱스를 일관되게 유지한는 것이 중요하다. 즉 예를 들어서 idx2가 마지막 문자의 위치를 가리키고 있는지, 또는 새로운 문자가 삽입될 위치를 가리키고 있는지를 섞어서 사용하면 안 되는 것이다. plain text, 즉 공백 사이에 있거나 문장의 처음이나 마지막에 있으며 태그가 아닌 '단어'의 경우 startend 인덱스를 별도로 설정해 단어의 시작과 끝을 알아낸다. 그 후 다시 끝에서부터 시작까지 거꾸로 string1string2로 복사해주면 된다.

 

#include <stdio.h>
#define MAX_LEN 100001

char string1[MAX_LEN];
char string2[MAX_LEN];
int idx1 = 0;
int idx2 = 0;

int main(void) {
    gets(string1);

    char cur;
    while (1) {
        cur = string1[idx1++];

        // EOF
        if (cur == '\0') {
            string2[idx2] = '\0';
            break;
        }

        if (cur == '<') { // tag
            while (cur != '>') {
                string2[idx2++] = cur;
                cur = string1[idx1++];
            }
            string2[idx2++] = cur;
        } else if (cur == ' ') { // space
            string2[idx2++] = ' ';
        }
        else { // plain text
            int start = idx1 - 1;
            int end = idx1 - 1;
            while (cur != ' ' && cur != '\0' && cur != '<') {
                cur = string1[++end];
            }
            end--;

            for (int j = end; j >= start; j--) {
                string2[idx2++] = string1[j];
            }

            idx1 = end + 1;
        }
    }

    printf("%s", string2);
}
Comments