๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 1213 ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2025. 2. 8. 00:03

https://www.acmicpc.net/problem/1213


 

ํŒฐ๋ฆฐ๋“œ๋กฌ ํŠน์ง•์— ๋Œ€ํ•œ ๋ฌธ์ œ. ๋‚œ์ด๋„์— ๋งž๋Š” ๋ฌธ์ œ ๊ฐ™๋‹ค.


์•„์ด๋””์–ด

- ์•ŒํŒŒ๋ฒณ string์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.

๋งŒ์•ฝ ๋ฌธ์ž์—ด์—์„œ ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒŒ 2๊ฐœ ์ด์ƒ ์กด์žฌํ•œ๋‹ค๋ฉด, ํŒฐ๋ฆฐ๋“œ๋กฌ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

 

- ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์•ž, ์ค‘๊ฐ„, ๋’ค 3๊ฐ€์ง€ ํŒŒํŠธ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ํ•ฉ์ณ์„œ ์™„์„ฑ์‹œ์ผœ ์ค€๋‹ค. 


์ „์ฒด ์ฝ”๋“œ

english_name = list(input())


visited = [0] * 26
for e in english_name:
    visited[ord(e) - 65] += 1

count = 0
for i in range(26):
    if visited[i] % 2 == 1:
        count += 1

if count >= 2: #์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒƒ์ด ๋‘๊ฐœ ์ด์ƒ์ด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ ์•ˆ๋จ
    print("I'm Sorry Hansoo")
else:
    front = ''
    middle = ''
    back = ''
    for i in range(26):
        if visited[i] % 2 == 1: #์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ผ ๋•Œ
            front = front + chr(i + 65) * (visited[i] // 2)
            back = chr(i + 65) * (visited[i] // 2) + back
            middle = chr(i + 65)
        else:
            front = front + chr(i + 65) * (visited[i] // 2)
            back = chr(i + 65) * (visited[i] // 2) + back
    print(front + middle + back)

์ฝ”๋“œ ์„ค๋ช…

count = 0
for i in range(26):
    if visited[i] % 2 == 1:
        count += 1

 

๋ฌธ์ž์—ด์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์นด์šดํŠธํ•ด ์ค€๋‹ค. 

 

if count >= 2: #์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒƒ์ด ๋‘๊ฐœ ์ด์ƒ์ด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ ์•ˆ๋จ
    print("I'm Sorry Hansoo")
else:
    front = ''
    middle = ''
    back = ''
    for i in range(26):
        if visited[i] % 2 == 1: #์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ผ ๋•Œ
            front = front + chr(i + 65) * (visited[i] // 2)
            back = chr(i + 65) * (visited[i] // 2) + back
            middle = chr(i + 65)
        else:
            front = front + chr(i + 65) * (visited[i] // 2)
            back = chr(i + 65) * (visited[i] // 2) + back
    print(front + middle + back)

 

์ฃผ์„๊ณผ ๊ฐ™์ด ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒŒ ๋‘ ๊ฐœ ์ด์ƒ์ด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.(์˜ˆ AAABCC, AAABBB)

 

ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๊ฐ€๋Šฅํ•˜๋ฉด, ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋Œ€๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋งŒ๋“ค๊ธฐ ํŽธํ•˜๋ ค๊ณ  ์•ž, ์ค‘๊ฐ„, ๋’ค ๋ถ€๋ถ„์„ ๋‚˜๋ˆ ์„œ ๋งŒ๋“ค์—ˆ๋‹ค.