728x90
반응형
🔗 Problem Link
https://www.acmicpc.net/problem/1213
❔Thinking
- 주어진 문자열을 사전순으로 앞서는 '펠린드롬' 문자열을 만들어 반환한다.
- 똑바로해도, 거꾸로해도 같아야 하기 때문에, 배열 세개로 해결한다. (left, mid, right)
- 만약 가운데 오는 문자열이 2개 이상일 경우, 펠린드롬 문자열을 만들 수 없다. (ex - AAABBB)
💻Solution
name = list(input())
name.sort()
char_set = set()
left, mid, right = [], [], []
for char in name:
if char not in char_set:
char_set.add(char)
tmp = name.count(char)
if tmp == 1:
mid.append(char)
continue
if tmp % 2 != 0:
tmp -= 1
mid.append(char)
left.append(char * (tmp//2))
right.append(char * (tmp//2))
if len(mid) >=2:
print("I'm Sorry Hansoo")
else:
print(''.join([*left, *mid, *right[::-1]]))
🗝️keypoint
- 펠린드롬 문자열이 가능한지 확인하고, 각 경우에 따른 출력을 정확하게 확인하여 코드를 작성한다. (ex - 대문자 여부)
- 여러개의 펠린드롬 문자열이 가능할 경우 사전순을 따져야 하기 때문에, 사전순으로 정렬하여 문자열을 확인하면 곧바로 해결할 수 있다.
- 배열에 담긴 문자열을 꺼내어 하나의 문자열로 만드는 방법에는 여러가지가 있다 (*, join, for문 등)
'코딩테스트 > Python' 카테고리의 다른 글
[Programmers] Level 2. 디펜스 게임 (0) | 2025.01.06 |
---|---|
[Beakjoon] 20040. 사이클 게임 (0) | 2025.01.03 |
99클럽 코테 스터디 0일차 TIL (floyd-warshall) (0) | 2024.10.28 |
[Baekjoon] 25192. 인사성 밝은 곰곰이 (0) | 2024.06.11 |
[Beakjoon] 7785번 - 회사에 있는 사람 (0) | 2024.05.12 |