https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
어렵게 생각했고.. 어려웠지만.. 어려웠던 문제..
난 머리가 안 좋아서 열심히 해야겠다 ^^,,,ㅎㅎ
이 문제는 조건에 따른 규칙을 잘 생각해내는 게 중요한 문제였다.
1. 팰린드롬 그 잡채인 문자열은 가장 긴 팰린드롬에 하나 밖에 들어가지 못한다. 주어진 모든 문자열은 다르기 때문이다. 따라서 palindrome_itself라는 boolean 변수만 만들어주었다. palindrome_itself가 True이면 마지막에 m만 길이에 추가해주면 된다.
2. 팰린드롬 쌍이 없는 문자열은 갖다 버리면 된다. 팰린드롬 쌍이 있는 것들만 palindrome_pairs 배열에 저장해두었다. (다시 보니 배열을 만들 필요까지도 없고 길이만 저장하면 되겠군)
T = int(input())
for test_case in range(1, T + 1):
print('#%s'%test_case, end=' ')
n, m = map(int, input().split())
words = [input() for _ in range(n)]
# 검색 시간을 O(1)으로 만들기 위해 set을 사용
s = set(words)
palindrome_itself = False
palindrome_pairs = []
for word in words:
# 팰린드롬 문자열인지 판별. 팰린드롬 문자열이 있으면 마지막에 m을 더해주기만 하면 된다.
if word == word[::-1]:
palindrome_itself = True
elif word[::-1] in s:
# 이 부분은 굳이 배열로 만들었어야 했나..? 길이만 저장해도 충분하다.
palindrome_pairs.append(word)
answer = len(''.join(palindrome_pairs))
print(answer + m if palindrome_itself else answer)
SSAFY에 합격하게 되었다!
앞으로 계속해서 부족한 부분을 채워나가야겠다.
나란 사람 알고리즘 풀 때 뇌 굴러가는 속도가 거북이 같지만 붙여주신만큼 열심히 해야겠다 ㅎㅎ...!!!
SWEA 열심히 풀자!!!!
