python/백준 알고리즘

[백준] 10988번: 팰린드롬인지 확인하기 (python)

eun2ng 2024. 12. 12. 11:32

문제링크

https://www.acmicpc.net/problem/10988

 

내가 푼 코드

word = input()
length = int(len(word)/2) 

for i in range(length):
	if word[i] == word[-(i+1)]:
    	result = 1
	else:
    	result = 0
        break
print(result)

1) 단어를 입력받는다

2) 입력받은 단어를 2로 나눈 값을 정수화해서 length에 넣어준다 

     => 한 단어를 반으로 나눴을 때 앞뒤로 대칭이면 팰린드롬이니까 반씩 비교해주기 위해

3) 0부터 length-1까지 for문을 돌린다.

4) if word[0] == word[-1] 이면 result에 1 /  if word[1] == word[-2] 이면 result에 1 

    아니면 result = 0 을 넣고 break로 for문을 나온다.

5) result값 프린트

 

과정

break나 continue를 사용한 for문을 돌려서 for문 안에서 팰린드롬이 아니면 print(0)을 해주고, 팰린드롬이면 for문을 나가서 print(1)을 해주려고 했다.

그런데 break나 continue 문을 잘 사용하는 것이 어려워서 출력에서 0과 1이 전부 출력되었다.

for문 밖에서 print를 해주라는 힌트를 얻어 result 값에 1 또는 0을 넣어주고 for문 밖에서 print를 해줬더니 해결되었다.


남이 푼 코드1

서칭을 해보다가 다른 분이 푼 코드가 내가 원하던 방식이어서 참고해봤다.

word = input()
for i in range(len(word)) :
    if word[i] == word[-1-i] :
        pass
    else :
        print(0)
        exit(0)
print(1)

 

여기에서 보면 팰린드롬이면 pass를 하고, 팰린드롬이 아니면 print(0)을 해준 뒤 exit(0)을 해주신 모습을 볼 수 있다.

pass는 코드는 필요하지만, 아무 작업도 하지 않기를 원할 때 사용된다.

함수 같은 경우에는 실제 내부 구현을 필요 없지만, 추상 클래스에서 사용하는 경우에 pass를 통해서 껍데기만 만들 수 있다.

exit(0)은 프로그램이 모두 실행되고 정상 종료가 되는 것을 의미한다.

그렇기 때문에 for문을 나와 print(1)을 해주지 않고 프로그램이 종료될 수 있었던 것이다.

 

남이 푼 코드2

word = list(input())
word_reverse = list(reversed(word))

if word == word_reverse :
    print(1)
else :
    print(0)

생각하지 못한 방법인데 단어가 단어를 뒤집은 것과 같으면 팰린드롬에 해당한다.

그래서 reversed() 함수를 이용하거나, 리스트의 슬라이싱을 이용해서 word == word[::-1] 을 해주면 너무 쉽게 해결할 수 있었다.