hometowntree   3년 전

#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
char str[1111115];
stack <char> st;
int main()
{
int i = 0, cnt = 0, len, flag;
fgets(str, 1111115, stdin);
len = strlen(str);

for (i = 0; i < len-1; i++)     
{
flag = 0;
if (str[i]>=65 && str[i]<=90) st.push(str[i]);
if (str[i] >= 97 && str[i] <= 122) st.push(str[i]);
if (str[i] == ' ') {
while (!st.empty()) {
st.pop();
flag = 1;
}
if (flag == 1) cnt++;
}
}

if (!st.empty()) cnt++;        
printf("%d", cnt);
return 0;
}


게시판에 있는 TC모두 다 통과되는데 91%에서 자꾸 틀렸다고 하네요. 고수님들 도움좀 부탁드립니다 ㅜㅜ

seico75   3년 전

abc def geg a

이런 문자열에서 답이 틀릴 것 같습니다.

hometowntree   3년 전

답변 감사합니다. 주신 테스트케이스는 4가 출력되는데 정답이라 생각합니다 ㅜㅜ 어떤 케이스에서 틀렸는지 감이 안오네요

seico75   3년 전

답이 4인것은 맞는데 제가 넣어보면 답이 3이 나오는데...  마지막이 한 글자인 케이스입니다.

첫 for 문에서 < len -1 로 되어 있는데 이 경우 마지막 한 글자가 처리 안될 것으로 생각했습니다.

hometowntree   3년 전

fgets가 개행을 포함하기때문에

abc엔터를치면 길이가 4가되더라구요

그래서 실제 필요한 인덱스는 0 1 2 즉 abc니까 len-1 즉 3까지로 보았습니다 만약 len까지 두면 엔터문자도 처리하지않을까요?                     답변감사합니다! 진짜 감사합니다

seico75   3년 전

\n 으로 끝나는 경우와 eof 로 끝나는 경우가 있을텐데

\n 으로 끝나는 경우는 말씀하신 로직이 맞고, eof로 끝나면 마지막 문제가 무시되는 것 같습니다.
cmd창에서 실행하면 4가 나오고 ideone 으로 개행문자 없이 테스트해보면 3이 나오네요.
채점의 경우 리다이렉션을 쓰고 \n이 없는 경우도 있는 것 같습니다. 

제 의견으로는 문자 길이로 for를 돌리지 말고 문자의 값이 \0이나 \n 이 나올때 까지 돌리는 것이 좋지 않을까 합니다.

hometowntree   3년 전

세이코님 답변 정말 감사합니다. 진심으로 감사합니다

말씀하신대로 for문을 수정하여 제출해보겠습니다. 감사합니다 ㅠ

hometowntree   3년 전

감사합니다 for에서 while로 고친 후, 널문자까지 탐색을 시도했더니 성공했습니다.

예제 케이스도 비주얼에서 7이 출력되었는데(답은 6) 채점할때는 틀린 곳 없이 되었습니다 ㅎㅎ

감사합니다

댓글을 작성하려면 로그인해야 합니다.