BOJ 1406 에디터
- 문제 링크
https://www.acmicpc.net/problem/1406
- 문제 해설
java 내의 LinkedList를 이용하여 풀었다. ListIterator는 Iterator와는 다르게 양방향으로 원소에 접근이 가능하기에 ListIterator를 이용하였다.
18-19줄에서 커서를 맨 뒤로 보내는 작업을 먼저 해주고, 그 후 각 명령이 들어오면 그에 맞게 동작하도록 구현하였다.
ListIterator 내부에 현재 보고 있는 위치를 가리키는 cursor가 있어서 메소드를 활용하면 쉽게 해결할 수 있는 문제였다.
문제에서 사용한 메소드들만 정리해보겠다.
- hasNext() : iterator가 리스트를 순방향으로 순회할 때 다음 원소가 있으면 true를 없으면 false를 반환함
- hasPrevious() : iterator가 리스트를 역방향으로 순회할 때 다음 원소가 있으면 true를 없으면 false를 반환함
- next() : 리스트의 다음 원소를 반환하고, 커서의 위치를 순방향으로 이동시킴
- previous() : 리스트의 이전 원소를 반환하고, 커서의 위치를 역방향으로 이동시킴
- remove() : next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 리스트에서 제거함
- 코드 보기
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine();
int m = Integer.parseInt(br.readLine());
LinkedList<Character> list = new LinkedList<Character>();
for (int i = 0; i < str.length(); i++)
list.add(str.charAt(i));
ListIterator<Character> it = list.listIterator();
while (it.hasNext())
it.next();
for (int i = 0; i < m; i++)
{
String com = br.readLine();
char c = com.charAt(0);
if (c == 'P')
it.add(com.charAt(2));
else if (c == 'L')
{
if(it.hasPrevious())
it.previous();
}
else if (c == 'D')
{
if (it.hasNext())
it.next();
}
else if (c == 'B')
{
if (it.hasPrevious())
{
it.previous();
it.remove();
}
}
}
for (Character ch : list)
bw.write(ch);
br.close();
bw.flush();
bw.close();
}
}
'PS > BOJ' 카테고리의 다른 글
BOJ 2003 수들의 합 2 [Java] (0) | 2021.07.24 |
---|---|
BOJ 1158 요세푸스 문제 [Java] (0) | 2021.07.23 |
BOJ 11656 접미사 배열 [Java] (0) | 2021.07.22 |
BOJ 11655 ROT13 [Java] (0) | 2021.07.21 |
BOJ 10820 문자열 분석 [Java] (0) | 2021.07.21 |