파게로그

[백준 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