๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ํ‚ค๋กœ๊ฑฐ BOJ #5397

by seolhee2750 2021. 7. 30.
๋ฌธ์ œ ์„ค๋ช…

์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ›”์น˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ•์‚ฐ์ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์— ํ‚ค๋กœ๊ฑฐ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ๋ฉฐ์น ์„ ๊ธฐ๋‹ค๋ฆฐ ๋์— ์ฐฝ์˜์ด๋Š” ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์— ์ž…๋ ฅํ•˜๋Š” ๊ธ€์ž๋ฅผ ์–ป์–ด๋ƒˆ๋‹ค.

ํ‚ค๋กœ๊ฑฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅธ ๋ช…๋ น์„ ๋ชจ๋‘ ๊ธฐ๋กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ํ™”์‚ดํ‘œ๋‚˜ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ •ํ™•ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. 

๊ฐ•์‚ฐ์ด๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐฝ์—์„œ ์ž…๋ ฅํ•œ ํ‚ค๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๊ฐ•์‚ฐ์ด๋Š” ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•œ ํ‚ค๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๋ฐฑ์ŠคํŽ˜์ด์Šค, ํ™”์‚ดํ‘œ์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ•์‚ฐ์ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 1,000,000) ๊ฐ•์‚ฐ์ด๊ฐ€ ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, '-'๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ์ปค์„œ์˜ ๋ฐ”๋กœ ์•ž์— ๊ธ€์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๊ธ€์ž๋ฅผ ์ง€์šด๋‹ค. ํ™”์‚ดํ‘œ์˜ ์ž…๋ ฅ์€ '<'์™€ '>'๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ๋Š” ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ์›€์ง์ธ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ผ๋ถ€์ด๋‹ค. ๋ฌผ๋ก , ๋‚˜์ค‘์— ๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ์ง€์šธ ์ˆ˜๋Š” ์žˆ๋‹ค. ๋งŒ์•ฝ ์ปค์„œ์˜ ์œ„์น˜๊ฐ€ ์ค„์˜ ๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ปค์„œ ๋ฐ ์ปค์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ๊ฐ•์‚ฐ์ด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” ํ•ญ์ƒ 0๋ณด๋‹ค ํฌ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

2
<<BP<A>>Cd-
ThIsIsS3Cr3t

์ถœ๋ ฅ

BAPC
ThIsIsS3Cr3t

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

let count = Int(readLine()!)!

for _ in 0..<count {
    var left = [Character]()
    var right = [Character]()
    
    let input = readLine()!
    
    for i in input {
        if i == "<" {
            if !left.isEmpty { right.append(left.removeLast()) }
        }
        else if i == ">" {
            if !right.isEmpty { left.append(right.removeLast()) }
        }
        else if i == "-" {
            if !left.isEmpty { left.removeLast() }
        }
        else {
            left.append(i)
        }
    }
    
    print(String(left + right.reversed()))
}
  • ์Šคํƒ์œผ๋กœ ํ’€์—ˆ๊ณ , ์•ž์„œ ํ’€์ดํ•œ #1406 ์—๋””ํ„ฐ ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๋‹ค.
  • ์ปค์„œ๋ฅผ ๊ธฐ์ค€, ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋ˆ  left, right ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
  • <๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ, left ๋ฐฐ์—ด์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ ํ›„ removeLast()๋ฅผ ์ด์šฉํ•ด
    left์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•จ๊ณผ ๋™์‹œ์— ํ•ด๋‹น ์š”์†Œ๋ฅผ right ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.
  • >๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ, right ๋ฐฐ์—ด์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ ํ›„ removeLast()๋ฅผ ์ด์šฉํ•˜์—ฌ
    right์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ ์‚ญ์ œ์™€ ๋™์‹œ์— ํ•ด๋‹น ์š”์†Œ๋ฅผ left ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ–ˆ๋‹ค.
  • -๊ฐ€ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ, left ๋ฐฐ์—ด์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ ํ›„, ๋น„์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ
    left ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•ด์ฃผ์—ˆ๋‹ค.
  • ์œ„์˜ ๋ช…๋ น ์ด์™ธ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ๋Š” ์‹ค์งˆ์ ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์ด๊ธฐ ๋•Œ๋ฌธ์—
    ์™ผ์ชฝ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์—๋””ํ„ฐ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ ๋‚˜์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๋‹ˆ ๋ฐ”๋กœ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€