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
반응형