■ 10988번 팰린드롬인지 확인하기
■ 코드 풀이
문자열은 list처럼 slicing이 가능하다는 점을 알고 있다면, 쉽게 풀 수 있는 문제입니다. 두 가지 방법으로 풀어보겠습니다. 먼저 아래의 코드는 word를 입력받고, word의 reverse를 word_reverse 변수에 할당합니다. 그리고 for loop를 순서대로 돌면서 word와 word_reverse를 element-wise 별로 비교합니다. 각 위치 별로 단어가 같다면, True가 되고 이는 곧 숫자 1과 같으므로 문자가 모두 같다면 sum은 문자열의 길이와 동일해집니다.
이때, 단어의 역순을 구하는 방법에도 두 가지가 있습니다. 첫 번째는 word[-1::-1], 마지막 문자부터 첫 번째 문자까지 역순으로 배열하는 방법이고 두 번째는 reverse() 함수를 사용하는 것입니다. 정답을 채점했을 때, reverse() 함수의 속도가 빨라서 아래 코드에는 reverse 함수를 남겨두었습니다.
word = input()
#word_reverse = word[-1::-1]
word_reverse = ''.join(reversed(word))
sum = 0
for i in range(len(word)):
sum += (word[i]==word_reverse[i])
if sum == len(word):
print(1)
else:
print(0)
두 번째 풀이 방법은 reverse를 따로 구하지 않고 indexing만을 사용하여 바로 비교하는 방법입니다. 저는 두 번째 풀이 방법이 더 빠를 것이라고 생각했는데 놀랍게도 속도는 위의 코드가 더 빠르네요. 알다가도 모를 코딩의 세계인 것 같습니다.
word = input()
sum = 0
for i in range(len(word)):
sum += (word[i] == word[-1-i])
if sum == len(word):
print(1)
else:
print(0)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 4344번 평균은 넘겠지 문제 (0) | 2023.03.28 |
---|---|
[백준/Python] 1157번 단어 공부 문제 (0) | 2023.03.27 |
[백준/Python] 10812번 바구니 순서 바꾸기 (0) | 2023.03.25 |
[백준/Python] 2444번 별 찍기-7 문제 (0) | 2023.03.24 |
[백준/Python] 11718번 그대로 출력하기 문제 (0) | 2023.03.24 |
댓글