티끌모아 태산

[백 준/구현] 10988: 팰린드롬인지 확인하기 본문

백준 문제/문자열,누적합,구현

[백 준/구현] 10988: 팰린드롬인지 확인하기

goldpig 2023. 12. 26. 19:29
728x90

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

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

풀이

from collections import deque

s = input()
q = deque()

while s != '':
	is_palindrome = True
	compare_length = len(s) // 2

	for i in range(compare_length, len(s)):
		q.append(s[i])

	k = 0
	while k < compare_length and is_palindrome:
		ch = q.pop()
		if ch.lower() != s[k].lower():
			is_palindrome = False
		k += 1
	if is_palindrome:
		print(1)
		break
	else:
		print(0)
		break

처음에는 stack 자료주로 개념을 적용해서 풀이를 진행했다. while문을 통해 반복하기 때문에 뭔가 비효율적인거 같은데 어찌어찌 풀었더니 맞았다. 하지만 구글링을 통해 훨씬 간단하면서도 효율적으로 푸는 방법이 있었다.

  • 스택 활용 -> deque
  • reversed() 함수 활용
  • [::1] == [::-1] 을 활용
s = list(input()) # level
# reversed(s) -> <reversed object at 0x000001F433840160>
# ['l', 'e', 'v', 'e', 'l']
# print(s) -> level
if list(reversed(s)) == s:
	print(1)
else:
	print(0)
s = input()

if s[::1] == s[::-1]:
	print(1)
else:
	print(0)

위 두 방법이 시간적으로 효율적인 것을 확인할 수 있었다.

728x90