๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป iOSun
article thumbnail

๋ฌธ์ œ ์„ค๋ช…

LZW ์••์ถ• ๋‹จ๊ณ„๋Š” ์œ„์™€ ๊ฐ™๋‹ค.

์‚ฌ์‹ค.. ์ด ๋ถ€๋ถ„๋งŒ ๋ณด๊ณค ๋ฌธ์ œ ์ดํ•ด๋ฅผ ๋ชปํ–ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ๋ฅผ ๋ณด๊ณ  ๋ฌธ์ œ๋ฅผ ๊ฒจ์šฐ ์ดํ•ดํ–ˆ๋‹ค...

๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ํ˜„์žฌ ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ฐพ๊ณ  ๊ทธ ์ƒ‰์ธ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์œ„์— ์ฐพ์€ ๋‹จ์–ด+๋‹ค์Œ ๋‹จ์–ด๋ฅผ ์‚ฌ์ „์— ๋“ฑ๋กํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ABAB๊ฐ€ ์žˆ์„ ๋•Œ

1. A ์˜ ์ƒ‰์ธ๋ฒˆํ˜ธ 1์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ๋‹จ์–ด์ธ B๋ฅผ ํฌํ•จํ•œ AB๋ฅผ 27๋กœ ์‚ฌ์ „์— ๋„ฃ๋Š”๋‹ค.

2. B์˜ ์ƒ‰์ธ๋ฒˆํ˜ธ 2์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ๋‹จ์–ด์ธ A๋ฅผ ํฌํ•จํ•œ BA๋ฅผ 28๋กœ ์‚ฌ์ „์— ๋„ฃ๋Š”๋‹ค.

3. AB์˜ ์ƒ‰์ธ๋ฒˆํ˜ธ 27์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹ค์Œ ๋‹จ์–ด๋Š” ์—†์œผ๋‹ˆ ์‚ฌ์ „์— ๋„ฃ์„ ๊ฒŒ ์—†๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ธธ์ด๋ฅผ ์ตœ๋Œ€๋กœ ์ฐพ๋Š” ๊ฒƒ

์˜ˆ๋ฅผ ๋“ค์–ด ~ABCDEF๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์ „์— AB๋„ ์žˆ๊ณ  ABC๋„ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณธ๋‹ค.

for๋ฌธ์„ ๋Œ๋ฉฐ msg์˜ ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•ด๋ณธ๋‹ค.

 

1. ํ˜„์žฌ ๋ฌธ์ž๋Š” A: ๋จผ์ € A๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์‚ฌ์ „์— ์žˆ๋‹ค. -> A๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

2. ํ˜„์žฌ ๋ฌธ์ž๋Š” B: ์•„๊นŒ ์ €์žฅํ•ด๋‘” A์— B๋ฅผ ๋”ํ•œ AB๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์‚ฌ์ „์— ์žˆ๋‹ค. -> AB๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

3. ํ˜„์žฌ ๋ฌธ์ž๋Š” C: ์•„๊นŒ ์ €์žฅํ•ด๋‘” AB์— C๋ฅผ ๋”ํ•œ ABC๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์‚ฌ์ „์— ์žˆ๋‹ค. -> ABC๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋ฌธ์ž๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

4. ํ˜„์žฌ ๋ฌธ์ž๋Š” D: ์•„๊นŒ ์ €์žฅํ•ด๋‘” ABC์— D๋ฅผ ๋”ํ•œ ABCD๋ฅผ ์ฒดํฌํ•œ๋‹ค. ์‚ฌ์ „์— ์—†๋‹ค. -> ABC์˜ ์ƒ‰์ธ๋ฒˆํ˜ธ๋ฅผ ๋‹ต์— ๋„ฃ๋Š”๋‹ค. ABCD๋ฅผ ์‚ฌ์ „์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

์ด๋Ÿฐ ์‹์˜ ํ’€์ด๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.

 

 

์ฝ”๋“œ

func solution(_ msg:String) -> [Int] {
    let msg = msg.map { String($0) }
    var dictionary = [String: Int]()
    var answer = [Int]()
    var num = 26
    
    // A~Z ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์–ด์คŒ
    for i in 1...num {
        let alphabet = String(UnicodeScalar(64+i)!)
        dictionary[alphabet] = i
    }
    
    var w: String = "" // ํ˜„์žฌ ๋ฌธ์ž์—ด
    var wc: String = "" // ํ˜„์žฌ ๋ฌธ์ž์—ด+๋‹ค์Œ ๋ฌธ์ž์—ด
    for i in 0..<msg.count {
        w += msg[i]
        
        if i == msg.count-1 { // ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด์ด๋ฉด ํ˜„์žฌ ๋ฌธ์ž์—ด ์ƒ‰์ธ๋ฒˆํ˜ธ ๋„ฃ๊ณ  ๋๋ƒ„
            answer.append(dictionary[w]!)
            break
        } else {
            wc = w+msg[i+1] // ๋‹ค์Œ๋ฌธ์ž์—ด์„ ๋”ํ•œ wc
        }
        
        if dictionary[wc] == nil { // wc๊ฐ€ ์‚ฌ์ „์— ์—†๋‹ค๋ฉด
            num += 1
            dictionary[wc] = num // wc๋ฅผ ์‚ฌ์ „์— ๋„ฃ์–ด์คŒ
            answer.append(dictionary[w]!) // ๋‹ต์—” w๋ฅผ ๋„ฃ์–ด์คŒ
            w = "" // w์™€ wc ๋นˆ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
            wc = ""
        }
    }
    return answer
}

 

ํ›„๊ธฐ

ํ—ค๋งธ๋˜ ๋ถ€๋ถ„์€ ์ƒ‰์ธ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์„๋•Œ ๋”•์…”๋„ˆ๋ฆฌ์˜ last์˜ ์ƒ‰์ธ๋ฒˆํ˜ธ +1 ํ•˜๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ คํ–ˆ๋Š”๋ฐ.. ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ๋„ฃ์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์–ด๋ฒ„๋ ธ๋”ฐ..ใ…‹ใ…‹

๊ทธ๋ž˜์„œ num๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ๋„ฃ์„ ๋•Œ๋งˆ๋‹ค num+=1 ํ•ด์ฃผ์—ˆ๋‹ค.

 

์ฒ˜์Œ์— ๋ฌธ์ œ ์ดํ•ดํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ๊ฑธ๋ ธ์ง€๋งŒ.. ๋ฌธ์ œ๋งŒ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด ๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ์ด๋‹ค.

profile

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป iOSun

@iosun

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

profile on loading

Loading...