어떤 부분이 문제인지 잘 모르겠습니다..

Woojaeik Reply 7 years 36 weeks ago
원래 withcs의 input 예시 값을 복사한 다음 visualbasic 실행 창(검은 화면)에 입력하면 tab이 사라지나요?ㅠㅠ 제가 실험해볼 때는 다 되는데 input을 붙여넣기 하면 자꾸 tab수가 0으로 나와 혹시 이거 때문에 wrong answer가 뜨는건지 궁금합니다ㅠㅠ #include <stdio.h> int main() { int c, ns, nt, nl; /*차례로 입력하는 것과 space, tab, line의 개수입니다*/ ns = 0; nt = 0; nl = -1; while ((c = getchar()) != EOF) { if (c == ' ') { ns++; } if (c == '\t') { nt++; } if (c == '\n') { nl++; } } printf("%d\n%d\n%d\n", ns, nt, nl); return 0; }
Woojaeik Reply 7 years 36 weeks ago
nl 초기값을 0으로 하니까 accepted가 됐네요ㅠㅠ 그런데 궁금한게 그렇게 하면 input값을 복사해서 넣어봤을 때 새 줄 수가 4가 아니라 5가 나오는데 왜 이게 정답인지 궁금합니다.. 저는 처음에 nl =0을 했다가 요구하는 ouput인 4보다 하나 많은 5가 나오길래 문제가 요구하는게 전체 줄 수가 아닌 새 줄 수이기 때문에 nl = -1로 해야하는 구나라고 생각을 했었거든요ㅠㅠ 제가 어떤 부분을 잘 못 생각한 걸까요?
withcs1 Reply 7 years 36 weeks ago
윈도우 명령창에는 탭키가 복붙이안되서 그렇습니다 줄수 하나 더 나오는건 복사해서 넣으실때 엔터누르는거때문에 그런거로밖엔.. 복붙+엔터도 엔터가 추가로 붙는거라서요 혹시 그렇게 입력하고계신건 아닌지요
Woojaeik Reply 7 years 36 weeks ago
아 그런것 같습니다. 그런데 eof(컨트롤z)를 사용하기 위해서는 쓰고 싶은 내용들을 다 쓴 후에 바로 컨트롤z 누르고 엔터를 누르면 종료가 안되고 꼭 엔터+컨트롤z+엔터를 해야 하더라고요. 이런 상황에서 저 첫 번째 엔터가 새로운 라인(그냥 문자로도 카운트가 되는)이 되는건 어쩔 수 없는 것 같은데 그러면 저걸 상쇄 시켜주기 위해서 오히려 nl = -1로 해야 하는거 아닌가요ㅠㅠ 그리고 nl = 0으로 하고 종료까지 시키면 withcs에서 주셨던 인풋내용과 아웃풋 내용이 일치하지 않는데 왜 정답 처리가 되는 걸까요..ㅠㅠ
withcs1 Reply 7 years 36 weeks ago
제출된 소스코드는 모두 리눅스 서버에서 돌리기때문에 사용하고계신 개발환경에 따라서 예시의 아웃풋과 다르게 나올 수 있습니당 참고로 리눅스는 EOF전에 \n을 필요로 하지 않습니다. 그냥 알고리즘에 맞게 짜시면 될거같아요!