BOJ-1406, 에디터
문제 📑
https://www.acmicpc.net/problem/1406
문제 정리 ▾
- 문장을 입력 받고, 명령어의 개수도 개행으로 입력받는다.
- 각각의 명령어들이 입력이 되고, 그 명령어의 맞게 출력을 해주면 된다.
접근 🚶🏻
나의 생각 ▾
- 처음 문제를 봤을 때 커서를 인덱스로 다루고, 인덱스를 이용해 명령어들을 실행시키려고 했다.
- 예상외로 인덱스를 이용하는데 여러 문제들이 있어서 다른 String객체(Rstr)를 만들어 왼쪽으로 이동할 때마다 오른쪽의 값들을 Rstr변수에 넣어주었다.
내 코드(인덱스 이용_ 미해결) ▾
func solution() {
var data = readLine()!.map{ String($0) }
let cnt = Int(readLine()!)!
var idx = data.count - 1
for _ in 0..<cnt {
let input = readLine()!.split(separator: " ")
switch input[0] {
case "L":
if idx > 0 {
idx -= 1
}
print("L idx = \(idx)")
case "R":
if idx <= data.count-1 {
idx += 1
}
print("R idx = \(idx)")
case "B":
if idx > 0 {
data.remove(at: idx)
idx -= 1
}
print("B idx = \(idx)")
default:
// idx += 1
data.insert(String(input[1]), at: idx)
// idx += 1
print("P idx = \(idx)")
}
}
print(data.joined(separator: ""))
}
solution()
- 구현하다가 포기한 코드이다.
- 나름 생각은 괜찮았다고 생각했는데 끝까지 했다면 구현이 가능했으나 코드가 길어짐에 따라 생각을 바꾸기로 했다.
나의 해결 ▾
func solution() {
var Lstr = readLine()!
var Rstr = ""
for _ in 0..<Int(readLine()!)! {
let order = readLine()!
switch order {
case "L":
if !Lstr.isEmpty {
Rstr.append(Lstr.popLast()!)
}
case "D":
if !Rstr.isEmpty {
Lstr.append(Rstr.popLast()!)
}
case "B":
if !Lstr.isEmpty {
Lstr.removeLast()
}
default:
Lstr.append(order.last!)
}
}
print(Lstr + Rstr.reversed())
}
solution()
- 코드에 관한 내용은 밑에서 살펴보자 😆
코드 리뷰 ▾
for _ in 0..<Int(readLine()!)! {
let order = readLine()!
switch order {
case "L":
if !Lstr.isEmpty {
Rstr.append(Lstr.popLast()!)
}
case "D":
if !Rstr.isEmpty {
Lstr.append(Rstr.popLast()!)
}
case "B":
if !Lstr.isEmpty {
Lstr.removeLast()
}
default:
Lstr.append(order.last!)
}
}
- 명령어의 개수만큼 실행할 수 있게 for문을 큰 틀로 잡았다.
- 이후 명령어에 따라 switch문을 이용해 각각의 케이스에 맞게 넣어주었다.
- L: Rstr에 넣어줌(임시 저장)과 동시에 기존 입력받은 변수의 마지막 값을 삭제(왼쪽 이동)
- D: 왼쪽으로 이동한 경우가 없다면, 기존 변수에 Rstr의 마지막 값을 다시 넣어주었다. (오른쪽 이동)
- B: 커서 기준 왼쪽 삭제이므로, 마지막 값을 삭제해주면 된다. (커서 기준 왼쪽 값 삭제)
- P: 기존 Lstr에 추가를 해준다. (커서 기준 왼쪽 값 추가)
print(Lstr + Rstr.reversed())
- 임시저장 변수(Rstr)은 스택처럼 데이터가 들어가있으므로, 역순으로 바꿔주어 마지막 들어온것부터 나갈 수 있도록 해주었다.
Additional 📂
- 나름 쉬운 문제였다.
- 인덱스를 이용해 다시 풀어보려고 한다.
- 그래도 코드는 직관적이고 효율적인게 더 좋다고 생각하기에 두 번째 풀이도 나름 만족한다. 😀
'Algorithm.zip' 카테고리의 다른 글
[Swift]BOJ-17413 (0) | 2022.02.03 |
---|---|
[Swift]BOJ-10845 (0) | 2022.02.02 |
[Swift]BOJ-9012 (0) | 2022.01.31 |
[Swift]BOJ-9093 (0) | 2022.01.31 |
[Swift]BOJ-10828 (0) | 2022.01.30 |