TIL
TIL. 22 회문 판별하기
codermun
2020. 10. 30. 17:16
728x90
반응형
## 회문 판별하기
## 회문 (palinedrome)
## 순서를 거꾸로 읽어도 제대로 읽는 것과 같은 단어 또는 문장을 말한다. ex : 'level', 'sos', 'rotator' 등
## 회문은 첫번째 문자열과 맨마지막 문자열을 차근차근 비교해가며 서로의 문자열이 같은지 판별해나가며 찾는다.
## 반복문으로 회문 판별하기
word = input('단어 입력 ㄱ:') # level 입력
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) # 회문 판별값 출력
::
True # 회문 맞네
## 회문 판별에서 가장 중요한 부분은 문자열(단어)의 길이이다, 판별 기준을 문자열의 길이를 기준으로 하며 절반을 나누어 왼쪽 문자와 오른쪽 문자를 비교한다고 생각하면 된다.
## word[i] != word[-1-i] // word[0] (0으로 시작하는 인덱스번호), word[-1-0] == word[-1](-1을 기준으로 시작하는 인덱스번호)를 비교한다
## 시퀀스 뒤집기로 회문 판별하기
word = input('단어를 입력하세요: ') # level 입력
print(word == word[::-1]) # 원래 문자열과 반대로 뒤집은 문자열을 비교
::
True
## word[::-1]은 문자열 전체에서 인덱스를 1씩 감소시키면서 요소를 가져오므로 문자열을 반대로 뒤집는다.
## 리스트와 reversed 사용하기
word = 'level'
a = list(word) # word 문자열(str)을 list 객체로 할당
print(a) # ['l', 'e', 'v', 'e', 'l']
b = list(reversed(word)) # word를 list로 바꿔주고 요소 값을 뒤집어주어 b에 할당
print(b) #['l', 'e', 'v', 'e', 'l']
print(a == b)
::
True
word = 'apple'
a = list(word)
print(a) # ['a', 'p', 'p', 'l', 'e']
b = list(reversed(word))
print(b) # ['e', 'l', 'p', 'p', 'a']
print(a == b)
::
False
## 위 두 리스트를 만들어 각 요소 값이 같은지 ==로 비교하여 회문인지 아닌지 판별할 수 있다.
## 위와 같이 반복가능한 객체의 요소순서를 뒤진는 reversed를 사용해서도 가능
## 문자열의 join 메서드와 reversed 사용하기
word = 'level'
print(word == ''.join(reversed(word)))
::
True
print(''.join(reversed(word)))
# level
word = 'apple'
print(word == ''.join(reversed(word)))
::
False
print(''.join(reversed(word)))
# elppa
## join은 구분된 문자열과 문자열 리스트의 요소를 연결한다.
## 빈문자열 ''를 이용해 각 문자를 그대로 연결하는 방식이다.
728x90
반응형