47.5회문
, 김 수현님이 작성문의한 코드는 삭제합니다.
공백여러개를 고려해서 반복문을 두개나 만들었는데 왜 통과가안될까요 ㅠㅠ
(도장_ 관리자에 의해 편집됨 - 원문 제출일 2017년 7월 11일, 화요일, 오전 11:04 )
회신: 47.5회문
, 도장_ 관리자님이 작성문제에 제시된 예시처럼 "nurs es run"을 넣었을 때 1이 출력되어야 합니다.
문의한 코드는 0을 출력합니다.
nurs es run
0
Unit 6. 디버거 사용하기를 참고하여 중단점을 찍어서 해당 값을 면밀하게 살펴보는 전략을 사용하세요.
Unit 47.1의 전략을 사용하면 안 됩니다.
for(int i=0; i< length/2; i++ )
Unit 47.1에서는 공백이 없으므로 length / 2를 한 것으로 중간 지점에 도달할 수 있었습니다. 그러나 "nurs es run"의 length / 2를 하면 중간 지점에 도달할 수 없습니다.
문자열의 시작 위치부터 증가하는 begin과 끝 위치부터 감소하는 end로 나누고 begin < end를 만족하는 동안 루프를 반복하는 전략을 세워야 합니다.
심사 해설과 같이 공백이 왼쪽에 있으면 begin을 1 증가시켜주고, 공백이 오른쪽에 있으면 end를 1 감소시켜줘야 합니다.
만약 공백이 문자열의 왼쪽에 있을 때는 인덱스를 증가시켜주고, 문자열의 오른쪽에 있을 때는 인덱스를 감소시켜주면 됩니다.
문자가 공백이 아닐 때 판별하는 전략을 쓰는 것보단 문자가 공백일 때 위치만 이동하고, 회문 판별은 통과하는 전략을 써야 합니다.
문자가 공백인데 왼쪽에 있는 문자야? 그러면 begin을 1 증가.
문자가 공백인데 오른쪽에 있는 문자야? 그러면 end를 1 감소.
단계별로 종이에 그림을 그리고, 로직을 먼저 파악해야 합니다.