문제
https://www.acmicpc.net/problem/5397
풀이
커서를 이동하고, 중간에 값을 삽입하고, 삭제하고 하는 등의 요건을 살펴보면
이 문제가 연결리스트 문제라는걸 알 수 있다.
구현은 단순하다, LinkedList와 ListIterator 를 선언하고
입력받은 값을 순회하면서 로직을 처리한다.
"<" 값일 경우, iterator 가 앞으로 갈 수 있는지 검사하고 이동해주고, ">" 또한 마찬가지이다.
"-" 가 나올경우에, 가장 앞을 가리키고 있는지 확인하고 (커서가 가장 앞) ,
그게 아니라면 연결리스트에서 값을 삭제하고, iterator 를 한 칸 앞으로 이동시켜준다.
그 외에 일반 문자열은 현재 iterator 가 가리키고 있는 위치에 넣어주면 된다.
코드
import java.util.*;
import java.io.*;
public class Main {
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String[] line = br.readLine().split("");
LinkedList<String> linkedList = new LinkedList<>();
ListIterator<String> iterator = linkedList.listIterator();
for (String val : line) {
if(val.equals("<")){
if(iterator.hasPrevious()){
iterator.previous();
}
continue;
}
if(val.equals(">")){
if(iterator.hasNext()){
iterator.next();
}
continue;
}
if(val.equals("-")){
if(iterator.hasPrevious()){
iterator.previous();
iterator.remove();
}
continue;
}
iterator.add(val);
}
StringBuilder sb = new StringBuilder();
for (String s : linkedList) {
sb.append(s);
}
System.out.println(sb);
}
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
후기
ListIterator 의 존재를 잘 몰랐는데, 이번에 좀 정리하고 가는 거 같다.
'백준' 카테고리의 다른 글
2239 - 스도쿠 (Java) (0) | 2024.11.28 |
---|---|
22251 - 빌런 호석 (Java) (0) | 2024.11.26 |
3055 - 탈출 (Java) (1) | 2024.10.06 |
2573 - 빙산 (Java) (0) | 2024.10.06 |
2295 - 세 수의 합 (Java) (2) | 2024.10.03 |