Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[백준-Python] 10988번: 팰린드롬인지 확인하기 본문

🥧 Python/⚙️ 코딩테스트

[백준-Python] 10988번: 팰린드롬인지 확인하기

썸머몽 2023. 2. 23. 03:31
728x90
 

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이 출력된다.

걍 그 값을 바꾸는 거라서 지금과 같이 원래 값 == 리버스값 을 구해야 하는 문제에는 적절하지 않다.

728x90