eastho0116   2년 전

어디가 문제인걸까요...dz가 단어 하나로 처리되는 건 알겠는데 왜..그런 일이 생기는 건지를 모르겠습니다.

bamgoesn   2년 전

입력이 dz일 때, i=0에서 60행의 조건을 만족하지만 62행의 조건은 만족하지 못해 아무 일도 안 일어나고 통과됩니다. 한편 i++는 그 이후 정상적으로 일어납니다.

이후 i=1에서 아무 조건도 만족하지 못해 68행에서 word++가 실행되어 1이 출력됩니다.

bamgoesn   2년 전

https://hy38.tistory.com/10

이건 추가 팁인데요, strlen은 문자열의 길이 n에 대해 O(n)의 시간복잡도를 갖습니다. strlen 자체가 문자열을 돌면서 '\0'이 나올 때까지 일일이 개수를 세기 때문입니다. 따라서 for문에 strlen 사용하게 되면 루프를 돌 때마다 문자열의 길이를 계속 세므로 비효율적입니다.

문자열의 길이가 변하지 않는다면 특정 변수에 strlen()의 값을 담아놓고 사용하고, 변한다면 문자열의 길이가 변할 때마다 길이를 저장하는 변수의 값을 업데이트해주거나, 아니면 C++ <string> 헤더에 선언된 String.length() 함수를 사용하면 됩니다.

위 블로그의 내용을 참고했습니다.

eastho0116   2년 전

허억...또 이렇게 꿀팁을,,, 감사합니다 선생님..ㅠㅠㅠㅠㅠ 진짜 많이 도움됐습니다!!감사합니다!!!!!

bamgoesn   2년 전

GDB와 같은 디버거를 사용하면 코드의 각 행마다 각 변수가 무슨 값을 갖고 있는지 하나씩 추적해볼 수 있기 때문에, 코드 내에서 자기가 한 실수를 쉽게 찾을 수 있습니다.

이 상황과 같은 경우라면, dz를 직접 넣어봐서 어떤 조건에서 걸려서 i와 word의 값이 어떻게 변하길래 오답이 나오는지 쉽게 파악할 수 있었을 겁니다. (디버거를 사용하지 않고 printf로 변수의 값을 출력해서 변수를 추적해도 되긴 합니다.)

C++ 디버거 사용법을 구글링해서 한번 활용해보세요. 저도 천재는 아니라서 남의 코드를 보자마자 어떻게 동작하는지 바로 눈치채지는 못하고, 직접 입력을 이것저것 만들어서 디버거를 돌려보는 방식으로 동작을 살펴봅니다.

Visual Studio를 사용하신다면 아마 자체적으로 내장된 디버거가 있을텐데 저는 Visual Studio를 사용하지 않아서 구체적인 건 잘 모르겠습니다. 한번 구글링해보세요.

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