10988번: 팰린드롬인지 확인하기
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
www.acmicpc.net
📌 풀이
풀 때는 머리를 싸맸는데 매우 쉬운... 방법들이 2개나 있었다.
일단 팰린드롬이라고 noon, kiik 처럼 가운데를 기준으로 데칼코마니처럼 똑같은 단어를 말한다.
푸는 방법이 3개나 돼서 코드별로 풀이를 적는다.
✅ 코드 (1번; 맨 처음 풀었다)
word = input()
for i in range(len(word)) :
if word[i] == word[-1-i] :
pass
else :
print(0)
exit(0)
print(1)
word를 문자열로 받고, for문은 len(word)로 돌려준다. 그리고 인덱스와 인덱스가 같은지 알아본다.
예를 들어 i=0이라고 해보자.
word = 'noon'의 경우 word[0] == word[-1-0], word[1] == word[-1-1] 로 대칭이 된다.
근데 여기 보면 계속 i와 -1-i를 비교하고 그 값이 참일 경우 pass를 일단 한다.
저기서 pass가 아니라 print를 하면 어떻게 될까? 1이 word 수만큼 나온다. for문에 걸려 계속 반복하기 때문이다.
그래서 이 경우는 pass하고 그렇지 않은 경우를 0으로 출력시키고 for문을 빠져 나온다.
이에 해당되지 않은, pass 되었다면 for문 밖의 print(1)의 영향을 받게 된다.
✅ 코드 (2번; 리스트의 슬라이싱 사용)
word = list(input())
if word == word[::-1] :
print(1)
else :
print(0)
2번부터는 word를 리스트로 받아준다. word[::-1]은 반대로 뒤집은, 대칭을 말한다.
예를 들어 a = 'abcd'
print(a[::-1])를 하면 출력값은 'dcba'가 나온다.
print(a[3:1:-1])을 하면 인덱스 3부터 1까지 거꾸로(왼쪽으로) 출력해주면 된다. (시작 인덱스가 더 커야 한다.)
아무튼 그래서 [::-1]을 쓰면 너무나 쉽게 구할 수 있다.
✅ 코드 (3번; reversed 사용)
word = list(input())
word_reverse = list(reversed(word))
if word == word_reverse :
print(1)
else :
print(0)
reversed(list)와 list.reverse() 를 알아봤다.
많이 헤맸던 reversed 내장함수를 활용한다.
reversed는 reversed(word) 이런 식으로 쓸 수가 없다. 리스트도, 튜플도, 딕셔너리도, 문자에서도 다 이상한 오류가 뜬다.
이놈은 print(reversed(word)) 해도 당연히 안된다. 이놈을 쓰고 싶다면 다른 변수에 할당을 해줘야 한다.
마치 word_reverse = list(reveresed(word) 라고 한 것 처럼. 아놔 무슨 차이인데...
게다가 이렇게 다른 변수에 할당을 해줘도 문자열에서는 오류가 뜬다. (나머지는 잘 나옴)
비교 대상으로는 reverse가 있다.
얘는 list에서 지원하는 함수로(위의 경우는 아니다.) list.reverse() 이런 식으로 쓴다.
list에서 지원하니 당연히 리스트 타입에서만 쓸 수 있고 나머지는 에러가 뜬다.
리스트 값을 반환하는 게 아니라 변환 시켜주기 때문에 위처럼 다른 변수에 할당 시키면 None이 출력된다.
걍 그 값을 바꾸는 거라서 지금과 같이 원래 값 == 리버스값 을 구해야 하는 문제에는 적절하지 않다.
'🥧 Python > ⚙️ 코딩테스트' 카테고리의 다른 글
[백준-Python] 5717번: 상근이의 친구들 (0) | 2023.02.24 |
---|---|
[백준-Python] 5086번: 배수와 약수 (0) | 2023.02.24 |
[백준-Python] 10886번: 0 = not cute / 1 = cute (0) | 2023.02.23 |
[백준-Python] 10102번: 개표 (0) | 2023.02.23 |
[백준-Python] 5063번: TNG (0) | 2023.02.23 |