๋ฐฑ์ค€ - ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ(Swift)

2022. 10. 28. 11:16ใ†Algorithm

๋ฐฑ์ค€ - ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

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

 

1213๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” "I'm Sorry Hansoo"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

 

 

 ๋‚˜์˜ ํ’€์ด

 

ํšŒ๋ฌธ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•Œ๊ณ ์žˆ์—ˆ์ง€๋งŒ ํšŒ๋ฌธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ์ž˜ ์™€๋‹ฟ์ง€์•Š์•˜๋‹ค. 

 

์šฐ์„  ์ง์ˆ˜๋งŒ ์žˆ์„๋•Œ๋Š” 100% ํšŒ๋ฌธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ํ™€์ˆ˜๊ฐ€ ํฌํ•จ๋ ๋•Œ๋Š” ํ™€์ˆ˜์ธ ์•ŒํŒŒ๋ฒณ์ด ํ•œ ์ข…๋ฅ˜์ผ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ ๊นŒ์ง€๋Š” ์•Œ์•˜๋‹ค.

 

์ฆ‰ AABBC๋Š” ABCBA๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ AABBCD๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ํ™€์ˆ˜๋ฅผ ๊ฐ€์šด๋ฐ ์ง์ˆ˜๋ฅผ ์–‘์ชฝ์— ๋ฐฐ์น˜ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

 

๋˜ ์žฌ๋ฐŒ์—ˆ๋˜ ๊ฒƒ์€ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ๋•Œ๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— key๊ฐ€ ํฐ๊ฐ’๋ถ€ํ„ฐ ์ •๋ ฌํ•ด์„œ ํฐ๊ฐ’๋ถ€ํ„ฐ ๋‚˜๊ฐ€๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด์˜€๋‹ค. 

 

 

import Foundation

var dic:[String: Int] = [:]
let strArr = readLine()!.map{String($0)}
// ์•ŒํŒŒ๋ฒณ์ด ์“ฐ์ธ ๊ฐœ์ˆ˜๋ฅผ ์‚ฝ์ž…
for x in strArr {
    if dic[x] == nil {
        dic[x] = 1
    } else {
        dic[x]! += 1
    }
}
// ํ™€์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด
var odd: [String] = []
for key in dic.keys {
    if dic[key]! % 2 == 1 {
        odd.append(key)
    }
}

// ์•ŒํŒŒ๋ฒณ์ด ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๊ฐ€ 1๊ฐœ์ด์ƒ์ด๋ผ๋ฉด ์ข…๋ฃŒ
if odd.count > 1 { print("I'm Sorry Hansoo"); exit(0)}

var result = ""
// ํ™€์ˆ˜๋ฅผ ๊ฐ€์šด๋ฐ ๋ฐฐ์น˜
if odd.count == 1 {
    result += odd[0]
    dic[odd[0]]! -= 1
}

// ์•ŒํŒŒ๋ฒณ์„ ํฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜ํ•จ์œผ๋กœ์จ ๊ฐ€์žฅ ๋ฐ”๊นฅ์กฑ์—” ์ œ์ผ ์ž‘์€ ๊ฒƒ์„ ๋ฐฐ์น˜
for key in dic.keys.sorted(by: >) {
    while dic[key]! > 0 {
        result = key + result + key
        dic[key]! -= 2
    }
}

print(result)