본문 바로가기

백준

11365)!밀비 급일

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


주어진 문자열을 뒤집어서 출력하되 END를 만나면 종료해야 한다.


문자열을 역순으로 출력하기 위해 문자열의 끝이 어디인지 알아야 하는데 이를 알려면 문자열의 길이를 알아야 한다.


C는 Java와 달리 문자열을 저장하는 String객체처럼 문자열에 관한 자세한 정보를 저장하는 객체가 없다.


문자열을 입력받으면 하나씩 세어 봐야 그 길이를 알 수 있다.


END를 입력받고 프로그램을 종료할 때 ENDasd는 END가 아니라는 점을 주의해야 한다.


문자열의 인덱스 0번부터 2번까지 END인지 검사하는 코드를 넣는 것은 위와 같은 이유 때문에 문제가 있다.


END와 일치했다고 해서 ENDasd가 END인 것은 아니기 때문이다.


또한 END인 경우의 문자열보다 END가 아닌 문자열이 훨씬 많을 것이다. 무조건 END를 검사하는 것은 오버헤드가 크고


애써 문자열 길이를 조사했는데 이를 제대로 활용하지 못한다.


END는 문자열 길이가 3이다. 즉 문자열 길이가 3개인 경우에만 END인지 검사하면 오버헤드를 줄일 수 있다.


#include<stdio.h>
int main() {
char tempStr[501];
int strLength = 0;
do {
gets(tempStr);
for (int i = 0; tempStr[i] != NULL; i++) strLength++;
if (strLength!=3) {
for (int i = strLength - 1; i >= 0; i--) putchar(tempStr[i]);
strLength = 0;
printf("\n");
}
else if (strLength == 3 && (tempStr[0]!='E' || tempStr[1] != 'N' || tempStr[2] != 'D')) {
for (int i = strLength - 1; i >= 0; i--) putchar(tempStr[i]);
strLength = 0;
printf("\n");
}
else break;
} while (1);
return 0;
}


'백준' 카테고리의 다른 글

10799)쇠막대기  (0) 2019.01.07
2941)크로아티아 알파벳  (0) 2019.01.06
2902)KMP는 왜 KMP일까?  (0) 2019.01.06
11721)열 개 씩 끊어 출력하기  (0) 2019.01.05
11718)그대로 출력하기  (0) 2019.01.04