Computer Science/코딩테스트 문제 풀이
[백준][파이썬][팰린드] 8892번: 팰린드롬
4356
2024. 9. 20. 16:45
문제: https://www.acmicpc.net/problem/8892
유사한 문제: https://hyundoil.tistory.com/172
문제
팰린드롬은 어느 방향으로 읽어도 항상 같은 방법으로 읽을 수 있는 단어이다. 예를 들어, civic, radar, rotor, madam은 팰린드롬이다.
상근이는 단어 k개 적혀있는 공책을 발견했다. 공책의 단어는 ICPC 문제가 저장되어 있는 서버에 접속할 수 있는 비밀번호에 대한 힌트이다. 비밀번호는 k개의 단어 중에서 두 단어를 합쳐야 되고, 팰린드롬이어야 한다. 예를 들어, 단어가 aaba, ba, ababa, bbaa, baaba일 때, ababa와 ba를 합치면 팰린드롬 abababa를 찾을 수 있다.
단어 k개 주어졌을 때, 팰린드롬을 찾는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 공책에 적혀져있는 단어의 수 k(1 ≤ k ≤ 100)가 주어진다. 다음 k개 줄에는 a부터 z까지 알파벳으로 이루어진 단어가 한 줄에 하나씩 주어진다. 모든 단어 길이의 합은 10,000보다 작거나 같다.
출력
각 테스트 케이스마다 팰린드롬을 출력한다. 만약, 가능한 팰린드롬이 여러 가지라면 아무거나 출력한다. 팰린드롬을 만들 수 없는 경우에는 0을 출력한다.
예제 입력 1
2
5
aaba
ba
ababa
bbaa
baaba
3
abc
bcd
cde
예제 출력 1
abababa
0
각 테스트별 주어진 문자열들에서 2개를 뽑아 합쳐서 팰린드롬이 있으면 출력하고 없으면 0을 출력하는 문제이다.
import sys
from itertools import combinations
def solution(words):
answer = 0
for a,b in combinations(words,2):
password1 = a+b
password2 = b+a
if password1 == password1[::-1]:
answer = password1
if password2 == password2[::-1]:
answer = password2
return answer
if __name__=="__main__":
T = int(input())
for _ in range(T):
k = int(input())
words = [str(input().rstrip()) for _ in range(k)]
print(solution(words))