dowon0509   5년 전

16번째 줄에서 S.length() / 10 + 2 대신 S.length() / 10이나 S.length() / 10 + 1을 쓰면 결과가 제대로 출력되지 않네요... 두 번째 예제(onetwothreefourfivesixseveneightnineten)의 경우는 length()가 39이니 S.length() / 10이나 S.length() / 10 + 1을 써서 16번 이하 반복문을 4번 혹은 5번 실행해도 충분히 결과가 나와야 할 것 같은데 왜 + 2를 한 시점부터 정상 작동되는지 궁금합니다...

djm03178   5년 전

조건문이라는 것은 처음에 한 번 계산하고 끝나는 것이 아니라 반복문을 돌 때마다 매번 새로 계산되는 것입니다. 그 말은, i < S.length() / 10 이라고 했다고 해서 처음에 입력받은 문자열의 길이에 의해 반복 횟수가 고정되는 게 아니란 거죠.

이 코드의 경우 19번째 줄에서 S가 기존 문자열에서 앞의 10개의 문자를 떼어 버리고 있기 때문에 S의 길이가 루프를 돌 때마다 10씩 줄어듭니다. 그래서 처음에는 39였던 S.length()가 한 번 루프를 돈 시점에서는 29가 되고, 그 다음 루프에는 19, 그 다음 루프에는 9가 되죠. 25번째 줄을 제외하고 총 3줄이 출력되어야 하는데, 조건을 만족하고 있는 상태는 길이가 i=2이고 S.length()=19인 때까지입니다.

dowon0509   5년 전

S의 길이가 줄어들면서 for문의 S.length()의 값에도 영향을 미친다는 말씀이시군요... 정말 감사합니다.

초기 S.length() 값을 별도의 변수로 지정하여 for문에 사용하면 깔끔하겠군요 ㅎㅎ

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