반응형

도전4. 회문(Palindrome)은 아픙로 읽으나 뒤로 읽으나 차이가 없는 단어들을 말한다. 예를 들어서 'level', 'bob'와 같은 단어들은 회문에 속한다.인자로 전달되는 문자열이 회문인지 아닌지를 출력해 주는 기능의 함수를 정의하고, 그에 적절한 main함수를 구현해 보자. 단, 문제의 편의를 위해서 대,소문자까지 일치해야 회문으로 인정하기로 하자.

 

 

이 문제를 풀기위한 핵심 요소가 몇개 있습니다. 

 

첫번째는 문자열을 입력받아, 길이를 구하는것, 

이 문자열의 길이는 반드시 구해야하는 것입니다.

문자열 길이는 회문 알고리즘에 꼭 필요하기 때문이죠. 

 

두번째로는 회문인지 아닌지 여부를 판단하는 것입니다. 

이 여부를 판단하기 위해서는 문자열의 길이가 꼭 필요합니다. 

회문 알고리즘에 대해 생각해 봅시다. 

 

만약 문자열의 길이가 홀수인 7이면(널 제외)

첫 문자는 인덱스가 0이며, 끝 문자는 인덱스가 6 일것입니다. 

인덱스 0과 6, 1과 5, 2와 4을 비교하며, 총 3번을 비교합니다.

홀수일때 한 가운데 있는 3은 비교해도 되고 안해도 됩니다. 

 

문자열의 길이가 짝수인 8이면(널제외) 

첫 문자는 인덱스가 0이며, 끝 문자는 인덱스가 7일 것입니다. 

이후 1과 6, 2와 5, 3과 4를 비교합니다. 총 4번을 비교합니다.

인제 저 길이를 n으로 확장시키는 것입니다. 

0과 n-1, 1과 n-2, 2와 n-3 을 계속 비교해나가며 총 [n/2] 번을 비교합니다. 

 

 

의사코드입니다.

 

배열의 길이를 미리 넉넉하게 지정해놓고 문자열을 입력받는다. 

 

길이 변수 0

while(배열요소가 널을 만날때까지 반복문 수행)

  길이 1증가

 

for(인덱스 변수 0부터 1씩 증가, 반복문은 [길이/2]번 반복) 

{ 

  인덱스 변수값과 n-1-인덱스 변수값 비교해서 

  다르면 회문이 아니고며 프로그램 종료 

} 

반복문을 무사히 끝내면(검사가 끝나면) 회문임. 

 

 

반복문을 while로 해도 되고 for로 해도 되는데 

알고리즘 종류에 따라서 더 이해하기 쉬운 모양이 있으므로.. 

아무거나 해도 상관은 없습니다 

 

 

코드입니다. 

 

의사코드에 있는 내용 그대로 입니다.

 

다른점은 회문을 찾아내는 기능을 한가지 함수로 만든것입니다.

 


실행결과입니다.

 

아주 잘 되는것을 확인할 수 있습니다.

 

이상입니다. 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기