CheonD 2022. 10. 25. 11:48

λ°±μ€€ - λ‹¨μ–΄μˆ˜ν•™(Swift)

 

 

 λ¬Έμ œ μ„€λͺ…

 

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

 

1339번: 단어 μˆ˜ν•™

첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N(1 ≤ N ≤ 10)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. λͺ¨λ“  단어에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ•ŒνŒŒλ²³μ€ μ΅œλŒ€

www.acmicpc.net

 

 λ‚˜μ˜ 풀이

 

 

μ²˜μŒμ—λŠ” 각 λ¬Έμžμ—΄μ˜ count에 λ”°λΌμ„œ 높은 μˆœμ„œλŒ€λ‘œ 값을 λΆ€μ—¬ν–ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄ μ˜ˆμ œλ“€μ€ μ „λΆ€ λ§žμ§€λ§Œ λ°˜λ‘€λ“€μ΄ μ‘΄μž¬ν–ˆλ‹€.

예λ₯Ό λ“€μ–΄ ABC, D, D둜 μ£Όμ–΄μ‘Œμ„λ•Œ λ‚΄κ°€ ν•œ 방식은 A:9, B:8, C:7, D:6이 λœλ‹€. ν•˜μ§€λ§Œ Dκ°€ 7인 κ²½μš°κ°€ μ΅œλŒ€μ˜ μˆ˜κ°€ λœλ‹€. 

즉 이 방식은 정닡이 될 수 μ—†λŠ” 풀이이닀.(문제λ₯Ό κ°„κ³Όν–ˆλ‹€.)

 

κ·Έλž˜μ„œ λ‹€λ₯Έμ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ•Œκ²Œ 된 μ†”λ£¨μ…˜μ€ 각 자리의 수λ₯Ό λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯ν•˜κ³  큰 κ°’λΆ€ν„° 숫자λ₯Ό λΆ€μ—¬ν•˜λ©΄ λ˜λŠ” 것이닀.

 

μ˜ˆμ‹œλ‘œ ABAλΌλŠ” 값이 λ“€μ–΄μ˜€κ²Œ λœλ‹€λ©΄ 첫 번째 AλŠ” 10의 2승 BλŠ” 10의 1승 μ„Έ 번째 AλŠ” 10의 3승이 되고 AλŠ” 101, BλŠ” 10μ΄λœλ‹€.

AλŠ” B보닀 크기 λ•Œλ¬Έμ— 9λ₯Ό BλŠ” 8을 μ£Όμ–΄ 101*9 + 10*8 = 989κ°€ λœλ‹€.

 

 

import Foundation

let n = Int(readLine()!)!
var dic: [String: Int] = [:]
for _ in 0..<n {
    var word = readLine()!
    var val = Int(pow(10, Double(word.count-1)))
    for x in word {
        if dic[String(x)] == nil {
            dic[String(x)] = val
        } else {
            dic[String(x)]! += val
        }
        val = val/10
    }
}
var result = 0
var cnt = 9
for num in dic.values.sorted(by : >) {
    result += cnt * num
    cnt -= 1
}

print(result)

 

 

 ν”Όλ“œλ°±

 

처음 λ‚΄ 풀이(ν‹€λ¦° 풀이)λ₯Ό ν•˜λ©΄μ„œ λͺ‡ 가지 μ•Œκ²Œ 된 점이 μžˆλ‹€.

 

λ¬Έμžμ—΄ λ°°μ—΄μ—μ„œ λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ”© μ€„μ—¬λ‚˜κ°ˆλ•Œ λ§ˆμ§€λ§‰μ€ μ—†μ–΄μ§€λŠ” 것이 μ•„λ‹Œ ""인 μ±„λ‘œ λ‚¨μ•„μžˆλŠ” 것이닀. κ·Έλž˜μ„œ λ”°λ‘œ ""κ°€ λ˜μ—ˆμ„λ•Œ λ°°μ—΄ μ „μ²΄μ—μ„œ removeν•  수 μžˆλ„λ‘ μ„€μ •ν–ˆλ‹€.

 

[["abcd", "efg"]]λΌλŠ” 2차원 배열이 μžˆμ„λ•Œ flatMap을 ν•˜λ©΄ ["abcd", "efg"]κ°€ λœλ‹€.

 

readLine으둜 λ¬Έμžμ—΄μ„ λ°›μ„λ•Œ κΌ­ map으둜 λ³€ν•˜λ €κ³  λ…Έλ ₯ν•˜μ§€ 말자. λ¬Έμžμ—΄μ„ λ°°μ—΄λ‘œ λ§Œλ“œλŠ”κ²Œ μ•„λ‹Œ λ¬Έμžμ—΄ κ·ΈλŒ€λ‘œ ν‘ΈλŠ” 문제일 μˆ˜λ„ μžˆλ‹€. λ„ˆλ¬΄ μ‚¬κ³ μ˜ 폭을 μ’νžˆμ§€ 말아야 κ² λ‹€.