ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์•ŒํŒŒ๋ฒณ์ด ๋‹จ์–ด์— ๋ช‡ ๊ฐœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

<๋ฌธ์ œ ๋งํฌ>

 

10808๋ฒˆ: ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜

๋‹จ์–ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” a์˜ ๊ฐœ์ˆ˜, b์˜ ๊ฐœ์ˆ˜, …, z์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” 100์„ ๋„˜์ง€ ์•Š์œผ๋ฉฐ, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.


์ถœ๋ ฅ

๋‹จ์–ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” a์˜ ๊ฐœ์ˆ˜, b์˜ ๊ฐœ์ˆ˜, …, z์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.


๋ฌธ์ œ ํ’€์ด

์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ํ•ด๋‹นํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์— +1์„ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ’€์ด๋Š” ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n^2) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์™€ ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์‚ฌ์‹ค, ์ €๋Š” ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ์ด์ค‘ for๋ฌธ์œผ๋กœ ํ’€์—ˆ์–ด์š” ..ใ…Ž)

 

๊ฐ ๋ฌธ์ž๋Š” ๊ณ ์œ ํ•œ ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์—ฐ์†๋œ ์•ŒํŒŒ๋ฒณ๋“ค์€ ์—ฐ์†๋œ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, 'a'๋Š” ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ 10์ง„์ˆ˜๋กœ ํ‘œ์‹œํ•˜๋ฉด 97, 'b'๋Š” 98, 'c'๋Š” 99 ... ์ˆœ์ฐจ์ ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

(์ถ”๊ฐ€๋กœ 'A'๋Š” 65, 'B'๋Š” 66 ... ์ˆœ์ฐจ์ ์œผ๋กœ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.) 

 

 ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ž…๋ ฅ์ด ์†Œ๋ฌธ์ž๋กœ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์‚ฌ์‹ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ’€์ด ์ˆœ์„œ

1. ์ถœ๋ ฅ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๋งŒํผ์˜ ์š”์†Œ๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

2. ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋ฐ›์€ ๋ฌธ์ž์—ด๋กœ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

3. ํ•ด๋‹น ๊ฐ’์„ 'a'์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์ธ 97๋กœ ๋นผ์ฃผ๊ณ , ํ•ด๋‹น ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ ์ž๋ฆฌ์— +1์„ ํ•ด์ค๋‹ˆ๋‹ค.


ํ’€์ด ์ฝ”๋“œ

< ํ’€์ด 1 - ์ด์ค‘ for๋ฌธ ํ™œ์šฉ >

 // ์ด์ค‘ for๋ฌธ ์‚ฌ์šฉ ํ’€์ด 
 // O(n^2)

var input = readLine()

if let input = input {
    var answer = [Int](repeating: 0, count: 26)
    var alphabets = "abcdefghijklmnopqrstuvwxyz"
    var index = 0

    for str in input {

        for alphabet in alphabets {
            if str == alphabet {
                answer[index] += 1

                index = 0
                break
            } else {
                index += 1
            }
        }
    }

    print(answer.map { String($0) }.joined(separator:" ") )
}

< ํ’€์ด 2 - ์•„์Šคํ‚ค ์ฝ”๋“œ ํ™œ์šฉ >

๋ฌธ์ž 'a'์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ€ 97์ธ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด 97์„ ์ง์ ‘ ๋Œ€์ž…ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

๋ชจ๋ฅผ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ง์ ‘ ํ™•์ธํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

(Swift์—์„œ ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด unicodeScalars, utf8, asciiValue ๋“ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
๊ฐ ๋ฐฉ์‹๋งˆ๋‹ค ๋ฆฌํ„ด๋˜๋Š” ํƒ€์ž…์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‚˜์ค‘์— Swift์˜ ๋ฌธ์ž์—ด์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋” ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.)

// ์•ŒํŒŒ๋ฒณ ์•„์Šคํ‚ค ์ฝ”๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด for๋ฌธ ํ•œ ๋ฒˆ์œผ๋กœ๋„ ๊ฐ€๋Šฅ.
// O(n)

let input = readLine()!

var array = [Int](repeating: 0, count: 26)
var a:Character = "a"

for alphabet in input {
    let index = Int(alphabet.asciiValue! - a.asciiValue!)
    array[index] += 1
}

print(array.map{ String($0) }.joined(separator: " "))