ko ko ko en en en ko ko cs zh cs ko ko ko ko ko ko ko ko ko ko ko ko ko ko lt ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fi ko ko ko ko ko ko ko ko ko ko ko ko ko ko ko fr ko ko ko en en ko en zh en en
COS Pro 2급 파이썬: 23.1 회문 판별하기
◀ 22.5 연습문제: 파일 경로에서 파일명만 가져오기23.2 N-gram 만들기 ▶︎
Unit 23. 회문 판별과 N-gram 만들기
이번에는 문자열 응용해서 회문을 판별하는 방법과 N-gram을 만드는 방법을 알아보겠습니다.
회문은 유전자 염기서열 분석에서 많이 쓰고, N-gram은 빅 데이터 분석, 검색 엔진에서 많이 쓰입니다. 특히 구글은 책들을 스캔해서 N-gram viewer를 만들었는데 사람들의 언어 패턴을 시대별로 분석하기도 했습니다.
회문(palindrome)은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 말합니다. 예를 들면 "level", "SOS", "rotator", "nurses run"과 같은 단어와 문장이 있지요.
그럼 문자열이 회문인지 판별하려면 어떻게 해야 할까요? 먼저 회문을 잘 살펴보면 첫 번째 글자와 마지막 글자가 같습니다. 그리고 안쪽으로 한 글자씩 좁혔을 때 글자가 서로 같으면 회문입니다.
즉, 가운데 문자 v를 기준으로 왼쪽과 오른쪽의 문자가 같습니다.
예제 코드를 보기 전에 스스로 고민해보고 코드를 작성해보세요. 고민하는 만큼 실력이 늡니다.
이제 반복문으로 문자열의 각 문자를 검사해보겠습니다.
word = input('단어를 입력하세요: ')   is_palindrome = True                 # 회문 판별값을 저장할 변수, 초깃값은 True for i in range(len(word) // 2):      # 0부터 문자열 길이의 절반만큼 반복     if word[i] != word[-1 - i]:      # 왼쪽 문자와 오른쪽 문자를 비교하여 문자가 다르면         is_palindrome = False        # 회문이 아님         break   print(is_palindrome)                 # 회문 판별값 출력
소스 코드를 실행한 뒤 level을 입력하고 엔터 키를 누르세요.
단어를 입력하세요: level (입력) True
문자열 'level'은 회문이므로 True가 출력됩니다. 만약 'hello'처럼 회문이 아닌 단어들을 입력하면 False가 출력됩니다.
단어를 입력하세요: hello (입력) False
회문 판별에서 가장 중요한 부분은 문자열(단어)의 길이입니다. 왜냐하면 회문 판별은 문자열의 길이를 기준으로 하기 때문입니다. 즉, 문자열을 절반으로 나누어서 왼쪽 문자와 오른쪽 문자가 같은지 검사해야 합니다.
다음과 같이 반복을 할 때 문자열 길이의 절반만큼만 반복하도록 만듭니다. 예를 들어 문자열의 길이가 5라면 5 // 2 = 2(버림 나눗셈)이므로 가운데 글자 바로 앞까지만 검사하게 됩니다.
for i in range(len(word) // 2):      # 0부터 문자열 길이의 절반만큼 반복
반복문 안에서는 왼쪽 문자 word[i]와 오른쪽 문자 word[-1 - i]를 비교하여 문자가 다르면 회문이 아니므로 is_palindrome에 False를 넣어주고 break로 반복문을 끝냅니다. 어차피 회문이 아니므로 더 검사할 필요가 없습니다.
if word[i] != word[-1 - i]:      # 왼쪽 문자와 오른쪽 문자를 비교하여 문자가 다르면         is_palindrome = False        # 회문이 아님         break
for 반복문의 i가 0부터 1씩 증가하므로 word[i]는 왼쪽에서 오른쪽으로 진행하고, word[-1 - i]는 오른쪽에서 왼쪽으로 진행합니다. 즉, 문자열의 마지막 문자는 word[-1]이므로 여기서 인덱스를 i만큼 계속 빼주면 오른쪽에서 왼쪽으로 진행합니다. 이 부분은 파이썬에서 음수 인덱스를 지정하면 뒤에서부터 요소에 접근할 수 있다는 점을 이용한 것입니다. 음수 -1에서 숫자를 빼면 -2, -3, -4처럼 되므로 i가 커질 수록 더 왼쪽으로 옵니다.
▼ 그림 23-2 회문 판별 과정
참고로 word[-1 - i]는 word[-(1 + i)]와 같이 숫자를 i만큼 증가시킨 뒤 음수로 바꾸는 방식으로도 표현할 수 있습니다.
◀ 22.5 연습문제: 파일 경로에서 파일명만 가져오기23.2 N-gram 만들기 ▶︎
COS Pro 2급 C 언어
COS Pro 2급 파이썬
Unit 1. 소프트웨어 교육과 파이썬
Unit 2. 파이썬 설치하기
Unit 3. Hello, world!로 시작하기
Unit 4. 기본 문법 알아보기
Unit 5. 숫자 계산하기
Unit 6. 변수 사용하기
Unit 7. 문자열 사용하기
Unit 8. 입력 값을 변수에 저장하기
Unit 9. 출력 방법 알아보기
Unit 10. 산술 연산자 알아보기
Unit 11. 불과 비교, 논리 연산자 알아보기
Unit 12. if 조건문으로 특정 조건일 때 코드 실행하기
Unit 13. else를 사용하여 두 방향으로 분기하기
Unit 14. elif를 사용하여 여러 방향으로 분기하기
Unit 15. for 반복문으로 Hello, world! 100번 출력하기
Unit 16. while 반복문으로 Hello, world! 100번 출력하기
Unit 17.break와 continue로 반복문 제어하기
Unit 19. 리스트와 튜플 사용하기
Unit 20. 리스트와 튜플 응용하기
Unit 21. 2차원 리스트와 튜플 사용하기
Unit 22. 문자열 응용하기
Unit 23. 회문 판별과 N-gram 만들기
23.3 연습문제: 단어 단위 N-gram 만들기
Unit 24. 함수 사용하기
- 이 사이트에 실린 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 (주)도서출판 길벗과 지은이에게 있습니다.
- 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 링크, SNS 공유는 허용합니다.
서울시 마포구 서교동 월드컵로 10길 56 (서울시 마포구 서교동 467-9)
Copyright © 2016-2021 Coding Dojang