728x90
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
이번 문제는 카테고리가 그리디이긴 하지만, 딱히 그리디를 생각하지는 않았다.
그냥 단순히 정렬 후 같은 것들은 묶어주고, 만약 문자가 짝수개이면 하나의 문자도 혼자있으면 안되며 홀수인 경우에는 하나의 문자만 홀로 있어야 한다.
다른 거 수와 문자열의 길이만 비교해서 구현하면 쉬운 문제로 딱히 로직에 관련해서는 설명하지 않도록 하겠다.
import sys
input_str = sorted(list(sys.stdin.readline().strip()))
start = ""
mid = ""
end = ""
chance = 0 if len(input_str) % 2 == 0 else 1
cur_char = ""
for i in input_str:
if cur_char == "":
cur_char = i
else:
if cur_char == i:
start = start + cur_char
end = cur_char + end
cur_char = ""
else:
chance -= 1
mid = cur_char
cur_char = i
if cur_char != "":
mid = cur_char
if chance >= 0:
print(start + mid + end)
else:
print("I'm Sorry Hansoo")
'알고리즘 > 그리디' 카테고리의 다른 글
백준 1715 카드 정렬하기 (Python) (1) | 2024.01.31 |
---|---|
백준 1946 신입사원 (Python) (1) | 2024.01.31 |
백준 16953 A → B (Python) (1) | 2024.01.31 |
백준 1931 회의실 배정 (Python) (0) | 2024.01.30 |
백준 11399 ATM (Python) (0) | 2024.01.30 |