๋ฌธ์ ์ค๋ช
ํ ์ค๋ก ๋ ๊ฐ๋จํ ์๋ํฐ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ด ํธ์ง๊ธฐ๋ ์์ด ์๋ฌธ์๋ง์ ๊ธฐ๋กํ ์ ์๋ ํธ์ง๊ธฐ๋ก, ์ต๋ 600,000๊ธ์๊น์ง ์ ๋ ฅํ ์ ์๋ค.
์ด ํธ์ง๊ธฐ์๋ '์ปค์'๋ผ๋ ๊ฒ์ด ์๋๋ฐ, ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ์(์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์ผ์ชฝ), ๋ฌธ์ฅ์ ๋งจ ๋ค(๋ง์ง๋ง ๋ฌธ์์ ์ค๋ฅธ์ชฝ), ๋๋ ๋ฌธ์ฅ ์ค๊ฐ ์์์ ๊ณณ(๋ชจ๋ ์ฐ์๋ ๋ ๋ฌธ์ ์ฌ์ด)์ ์์นํ ์ ์๋ค. ์ฆ ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ํ์ฌ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์์ผ๋ฉด, ์ปค์๊ฐ ์์นํ ์ ์๋ ๊ณณ์ L+1๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด ํธ์ง๊ธฐ๊ฐ ์ง์ํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
L | ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) |
D | ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ๋ค์ด๋ฉด ๋ฌด์๋จ) |
B | ์ปค์ ์ผ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ์ญ์ ํจ (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) ์ญ์ ๋ก ์ธํด ์ปค์๋ ํ ์นธ ์ผ์ชฝ์ผ๋ก ์ด๋ํ ๊ฒ์ฒ๋ผ ๋ํ๋์ง๋ง, ์ค์ ๋ก ์ปค์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ฌธ์๋ ๊ทธ๋๋ก์ |
P $ | $๋ผ๋ ๋ฌธ์๋ฅผ ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํจ |
์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ์ดํ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ช ๋ น์ด๊ฐ ์ํ๋๊ธฐ ์ ์ ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ๋ค์ ์์นํ๊ณ ์๋ค๊ณ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ N์ด๊ณ , ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100,000์ ๋์ง ์๋๋ค. ๋์งธ ์ค์๋ ์ ๋ ฅํ ๋ช ๋ น์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ M(1 ≤ M ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ช ๋ น์ด๋ ์์ ๋ค ๊ฐ์ง ์ค ํ๋์ ํํ๋ก๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
abcd
3
P x
L
P y
์ถ๋ ฅ
abcdyx
๋ด ๋ฌธ์ ํ์ด
import Foundation
var left = Array(readLine()!)
var right = [Character]()
let count = Int(readLine()!)!
for _ in 0..<count {
let edit = readLine()!
if edit == "L" && !left.isEmpty { right.append(left.removeLast()) }
else if edit == "D" && !right.isEmpty { left.append(right.removeLast()) }
else if edit == "B" && !left.isEmpty { left.removeLast() }
else if edit.first! == "P" { left.append(edit.last!) }
}
print(String(left + right.reversed()))
- ์คํ์ ์ด์ฉํ์ฌ ํ์ดํ๋ค.
- ์ปค์๋ฅผ ๊ธฐ์ค, ์ผ์ชฝ ๋ฌธ์๋ฅผ ๋ด์ ๋ฐฐ์ด left์ ์ค๋ฅธ์ชฝ ๋ฌธ์๋ฅผ ๋ด์ ๋ฐฐ์ด right๋ฅผ ์์ฑํ๋ค.
- L์ด ์
๋ ฅ๋์ ๊ฒฝ์ฐ ์ผ์ชฝ ๋ฐฐ์ด์ด ๋น์๋์ง ์ฒดํฌํด์ฃผ๊ณ ,
๋น์ด์์ง ์์ ๊ฒฝ์ฐ removeLast()๋ฅผ ์ด์ฉํ์ฌ
left ๋ง์ง๋ง ์์๋ฅผ ์ง์ฐ๋ ๋์์ right ๋ง์ง๋ง ์๋ฆฌ์ ์ถ๊ฐํด์ฃผ์๋ค. - D๊ฐ ์
๋ ฅ๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ ๋ฐฐ์ด์ด ๋น์๋์ง ์ฒดํฌํด์ฃผ๊ณ ,
๋น์ด์์ง ์์ ๊ฒฝ์ฐ์๋ ์ญ์๋ removeLast()์ด์ฉํ์ฌ
right ๋ง์ง๋ง ์์๋ฅผ left ๋ง์ง๋ง ์๋ฆฌ์ ์ถ๊ฐํด์ฃผ์๋ค. - B๊ฐ ์ ๋ ฅ๋ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ ๋ฐฐ์ด์ด ๋น์๋์ง ์ฒดํฌ, ์ผ์ชฝ์ ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํด์ฃผ์๋ค.
- P๊ฐ ์ ๋ ฅ๋ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ ๋ฐฐ์ด์ ๋ง์ง๋ง์, ์ ๋ ฅํ ๋ฌธ์๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
- left, right ๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ ๊ทธ๋ฅ ๋ฐฐ์ด ํ๋๋ง ์์ฑํ์ฌ
insert, remove ๋ฑ์ ์ด์ฉํด์ค ์๋ ์์ง๋ง, ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ณ์ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ
ํ ์นธ์ฉ ์ฎ๊ฒจ์ฃผ๋ ์์ ์ ๋ฐ๋ณตํด์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋๋ฌด ์ค๋๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ผ์ ์ด๋ ๊ฒ ์คํ์ ์ด์ฉํ๋ค.
๐ ์ฒ์๋ถํฐ ์คํ์ผ๋ก ํผ ๊ฒ์ ์๋๊ณ ,, ๋ฐฐ์ด๋ก ํ์์ ๋ ์๋ฌด๋ฆฌ ์์ ํด๋
๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ ์คํ์ผ๋ก ์๋ก ํ์๋ค. ์๋๋ ๋ฐฐ์ด๋ก ํ์๋ ํ์ด๋ฅผ ์ฒจ๋ถํ๋ค.
(๋ฐฐ์ด ํ์ด)
import Foundation
var input = Array(readLine()!).map({String($0)})
input.append(" ") // ๋งจ ๋ค์ ๊ณต๋ฐฑ ์ถ๊ฐ (์ปค์๋ฅผ ์๋ฏธ)
let count = Int(readLine()!)!
var edit = ""
for _ in 0..<count {
edit = readLine()! // ๋ช
๋ น์ด ์
๋ ฅ
if edit == "L" && input[input.startIndex] != " " { toLeft() }
if edit == "D" && input[input.endIndex] != " " { toRight() }
if edit == "B" && input[input.startIndex] != " " { Remove() }
if edit.first! == "P" { Insert() }
}
print(input.joined().filter({$0 != " "}))
// 'L' ๋ช
๋ น์ด ์ฒ๋ฆฌ ํจ์
func toLeft() {
let blank = input.firstIndex(of: " ")!
input.remove(at: blank)
input.insert(" ", at: blank - 1)
return
}
// 'D' ๋ช
๋ น์ด ์ฒ๋ฆฌ ํจ์
func toRight() {
let blank = input.firstIndex(of: " ")!
input.remove(at: blank)
input.insert(" ", at: blank + 1)
return
}
// 'B' ๋ช
๋ น์ด ์ฒ๋ฆฌ ํจ์
func Remove() {
let blank = input.firstIndex(of: " ")!
input.remove(at: blank - 1)
return
}
// 'P' ๋ช
๋ น์ด ์ฒ๋ฆฌ ํจ์
func Insert() {
let blank = input.firstIndex(of: " ")!
input.insert(String(edit.last!), at: blank)
return
}
๐ก ํผ๋๋ฐฑ
- ์์ ๋ฐฐ์ด ํ์ด๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง, ์คํ์ผ๋ก ํธ๋ ํจ์ฌ ํจ์จ์ ์ด๊ณ ์ฝ๋ ์์ฒด๋ ์์ฃผ ์งง์์ง ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
- ์์ผ๋ก๋ remove, insert ๋ฑ์ ๋ฐ๋ณตํด์ ์ฌ์ฉํ๋ ์์ ์ ์ต๋ํ ํผํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์์ธํธ์ค ๋ฌธ์ BOJ #1158 (0) | 2021.07.30 |
---|---|
[Swift Algorithm] ํค๋ก๊ฑฐ BOJ #5397 (0) | 2021.07.30 |
[Swift Algorithm] ๋ ์์ ํฉ BOJ #3273 (0) | 2021.07.30 |
[Swift Algorithm] ์ ๋๊ทธ๋จ ๋ง๋ค๊ธฐ BOJ #1919 (0) | 2021.07.30 |
[Swift Algorithm] ๋ฐฉ ๋ฒํธ BOJ #1475 (0) | 2021.07.30 |
๋๊ธ