구글링에서 본 것중 가장 직관적이고 쉬운 풀이를 가져왔다.
names = input()
name_cnt = [0 for _ in range(26)]
for name in names:
name_cnt[ord(name)-65] += 1
odd = 0
odd_alpha = ''
alpha = ''
for i in range(26):
if name_cnt[i] % 2 == 1:
odd += 1
odd_alpha += chr(i+65)
alpha += chr(i+65) * (name_cnt[i] // 2)
if odd > 1:
print("I'm Sorry Hansoo")
else:
print(alpha+odd_alpha+alpha[::-1])
# 참고 : https://alpyrithm.tistory.com/100
내가 혼자 풀어보았던 코드다.
알파벳마다 개수를 구한 뒤 딕셔너리에 넣어주는 방법을 생각해서 구현해보았다.
이 방법의 문제는 우선 dict는 for문에서 순서가 고정되어 있지 않다는 것이다.
그래서 Orderdict라는 객체를 불러와서 사용해주었다.
그런데도 틀렸다는 결과만이...;;;
뭐가 문제인지 아직 모르겠다.
from collections import OrderedDict
s = input()
# 알파벳 개수 딕셔너리 만들기.
s_set = set(s)
s_dict = OrderedDict()
for i in s_set:
s_dict[i] = s.count(i)
flag = 0
odd = ''
for k,v in s_dict.items():
if v % 2:
flag += 1
odd = k
if flag >= 2:
break
ans = []
# i) 알파벳 모두 짝수개 일 때
if flag == 0:
for k,v in s_dict.items():
ans.append(k*(v//2))
ans_reverse = sorted(ans,reverse=True)
ans = ans + ans_reverse
ans = ''.join(ans)
print(ans)
# ii) 홀수개 알파벳 하나 나머지 다 짝수
elif flag == 1:
for k,v in s_dict.items():
ans.append(k*(v//2))
ans_reverse = sorted(ans,reverse=True)
ans = ans + [odd] + ans_reverse
ans = ''.join(ans)
print(ans)
# iii) 불가능
else:
print("I'm Sorry Hansoo")
# 이거 왜 틀린거지?????????????????????????????????????????????
728x90
'알고리즘 문제풀이 > Greedy' 카테고리의 다른 글
(파이썬 python) 백준 13904번 : 과제(greedy) (0) | 2022.05.13 |
---|---|
(파이썬 python) 백준 11000번 : 강의실 배정(greedy) (0) | 2022.05.11 |
(파이썬 python) 백준 9237번 : 이장님 초대(greedy) (0) | 2022.05.11 |
백준 1343번 : 폴리오미노 (greedy) (0) | 2022.05.10 |
백준 1138번: 한 줄로 서기(greedy) (0) | 2022.05.10 |