Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1406๋ฒˆ - ์—๋””ํ„ฐ

๊ฐ์ž ๐Ÿฅ” 2022. 1. 30. 13:00
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ๋งํฌ

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

 

1406๋ฒˆ: ์—๋””ํ„ฐ

์ฒซ์งธ ์ค„์—๋Š” ์ดˆ๊ธฐ์— ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์€ ๊ธธ์ด๊ฐ€ N์ด๊ณ , ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๋Š” 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜

www.acmicpc.net

 

๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด (1) - ์‹œ๊ฐ„์ดˆ๊ณผ!

  • ์ปค์„œ๋ฅผ ์›€์ง์—ฌ์•ผํ•œ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ์Œ.
  • ๋ฐฐ์—ด์„ ์›€์ง์ด๊ณ , ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋ ๋•Œ๋งˆ๋‹ค ์ธ๋ฑ์Šค์™€ ๋ฌธ์ž์—ด์„ ๋ฐ”๊พธ์–ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์Œ.
import Foundation

var text = Array(readLine()!)
let n = Int(readLine()!)!


var cursor = text.count

for _ in 0..<n {
    var edit = readLine()!.components(separatedBy: " ")

    switch edit.removeFirst() {
        case "L" :
        if cursor > 0 {
            cursor -= 1
        }

        case "D" :
        if cursor != text.count {
            cursor += 1
        }

        case "B" :
        if cursor != 0 {
            text.remove(at:cursor-1)
            cursor -= 1
        }

        case "P" :
        var t = edit.popLast()!
        text.insert(contentsOf: t , at: cursor)
        cursor += 1

        default :
            break
    }

}

print(String(text))

 

๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด (2) - ๋งž์•˜์Šต๋‹ˆ๋‹ค!

์•ž์—์„œ ๋ฐฐ์—ด๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์™€์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ค„์ผ ์ˆ˜ ์žˆ์„์ง€ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€, ์ด์ „์— ํŒŒ์ด์ฌ์œผ๋กœ ์ฝ”ํ…Œ ๊ณต๋ถ€๋ฅผ ํ• ๋•Œ deque์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํƒ๊ณผ ํ? ๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ’€๊นŒ, pop, remove ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ์ด์šฉํ•ด์„œ ํ’€๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์ธํ„ฐ๋„ท์„ ์กฐ๊ธˆ ์„œ์น˜ํ•ด๋ณด์•˜๋‹ค. 

๋‚ด๊ฐ€ ์ด์ „์— ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค๋กœ ์ปค์„œ๋ฅผ์›€์ง์˜€๋‹ค๋ฉด, pop push๋ฅผ ์ด์šฉํ•ด์„œ ์ปค์„œ๋ฅผ ์›€์ง์ด๋Š” ๋ฐฉ์‹์ด ์žˆ์—ˆ๋‹ค.

[left] cursor [right] ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ด๋Š” ๋ช…๋ น์ผ๋•Œ๋Š” [left] ์—์„œ ๋งจ ๋งˆ์ง€๋ง‰ character๋ฅผ [right]๋กœ ์›€์ง์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ pop/push ๋™์ž‘์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ์‹œ๊ฐ„์ด ์ค„์–ด๋“œ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. 

var left = Array(readLine()!)
var right: [Character] = []
let n = Int(readLine()!)!

for _ in 0..<n {
    let edit = readLine()!
    switch edit {
    case "L":
        if !left.isEmpty {
            right.append(left.removeLast())
        }
    case "D" :
        if !right.isEmpty {
            left.append(right.removeLast())
        }
    case "B" :
        if !left.isEmpty {
            left.removeLast()
        }
    default:
        left.append(edit.last!)
    }
}

print(String(left+right.reversed()))

 

 

๋ฐฐ์—ด๋กœ ํ‘ธ๋Š” ๋ฐฉ์‹๋ณด๋‹ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ๋” ๊นŠ๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ๊ฐ™๋‹ค. ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€๋ฉด ๋‹ฌ๋ผ์ง€๊ฒŸ์ง€? ํžˆํžˆ 

๋ฐ˜์‘ํ˜•