2022. 7. 5. 00:09ใ๐ฑ Algorithm/Greedy
https://www.acmicpc.net/problem/1213
ํ์ด
ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ ์กฐ๊ฑด์ ์ฐ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค.
๊ฐ๊ฐ์ ์ํ๋ฒณ์ด ์ง์๋ก ๋ฑ์ฅํ๊ฑฐ๋, ํ์ ๊ฐ์ธ ์ํ๋ฒณ์ด ํ๋ ์ดํ๋ก๋ง ์กด์ฌํ๋ฉด ๋๋ค.
ํฐ๋ฆฐ๋๋กฌ์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ์ง์์ผ ๋, ์ ๋ฐ์ผ๋ก ์ชผ๊ฐ ์์ชฝ์ ๋ฌธ์์ด์ reversing ํ์ฌ ๋ท์ชฝ์ ๋ฌธ์์ด์ ๋ง๋ค ์ ์๋ค.
๋ฌธ์์ด ๊ธธ์ด๊ฐ ํ์๋ผ๋ฉด, ๊ฐ์ด๋ฐ์ ๋จ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ค๊ฐ ์ญ์์ธ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ชฝ ๋ฌธ์์ด์ ๋ฌด์์ด ๋์ฌ์ง๋ง ํ์ ํ๋ฉด, ๋ท์ชฝ ๋ฌธ์์ด์ ์๋์ผ๋ก ๋ง๋ค ์ ์๋ค.
์ฝ๋
import sys
from collections import Counter
input = sys.stdin.readline
word = input().rstrip()
word_dict = Counter(word)
word_part, center = [], ''
if len(list(filter(lambda x: x % 2 != 0, word_dict.values()))) > 1:
print("I'm Sorry Hansoo")
exit()
for k, v, in word_dict.items():
if v % 2 != 0:
word_part += ([k] * ((v - 1) // 2))
center = k
else:
word_part += ([k] * (v // 2))
front = ''.join(sorted(word_part))
print(front + center + front[::-1])
๋ฌธ์ฅ์ ๋์ค๋ ๊ฐ ์ํ๋ฒณ์ ๊ฐฏ์๋ฅผ ์ธ์ผํ๋ค. dictionary.get() ์ ์ฌ์ฉํ ์๋ ์์ง๋ง, collection ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Counter() ๋ฅผ ์ฌ์ฉํ๋ค.
word_dict = Counter(word)
์์ ์๋ฆฌ ํ์
๊ฐ ์ถ๋ ฅ๋ ์กฐ๊ฑด์ ๋จผ์ ์๊ฐํด๋ณด์.
์ฃผ์ด์ง ๋ฌธ์์ด๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ธ๋ฐ, ๋ฐ๋ก ํ์ ๊ฐฏ์์ธ ์ํ๋ฒณ์ด 2๊ฐ์ด์ ๋ฑ์ฅํ ๋๋ค.
2๊ฐ ์ด์์ ํ์ ๊ฐฏ์์ ์ํ๋ฒณ์ด ๋์ค๋ฉด ๋ฐ๋ก ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ์ํค๋ฉด ๋๋ค. filter() ๋ด๋ถ์ ๋๋ค์์ ์ฌ์ฉํด ๋ก์ง ๊ตฌํํ๋ค.
if len(list(filter(lambda x: x % 2 != 0, word_dict.values()))) > 1:
print("I'm Sorry Hansoo")
exit()
'๐ฑ Algorithm > Greedy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 12845 ๋ชจ๋์ ๋ง๋ธ ํ์ด์ฌ (0) | 2023.01.20 |
---|---|
๋ฐฑ์ค 1455 ๋ค์ง๊ธฐ ํ์ด์ฌ (0) | 2023.01.11 |
๋ฐฑ์ค ๋ฌผ๋ณ 1052๋ฒ ํ์ด์ฌ (0) | 2022.07.18 |
๋ฐฑ์ค 1931 ํ์ด์ฌ (0) | 2022.01.05 |
๋ฐฑ์ค 11000 ํ์ด์ฌ (0) | 2022.01.04 |