728x90
https://www.acmicpc.net/problem/1406
계속 시간초과가 나서 힘들었던 문제였다...
결국 구글에 검색을 해봤는데
1) ListIterator<String> iter = origin.listIterator(); 을 써서 커서를 나타내야한다.
2) BufferedWriter로 출력해야한다.
- System.out vs BufferedWriter vs StringBuilder 속도 차이
- 숫자 1000개 출력 * 10번 ( 단위 : ns )
- System.out => 14278900 14603400 14476599 15037400 16803600 15298800 14787999 13763000 13420000 13964200
- 평균 : 14,643,390 ns
- BufferedWriter => 2219700 2440499 2130399 1895800 1884599 2525300 2500900 3079399 2478800 1984099
- 평균 : 2,313,950 ns
- StringBuilder => 619600 945899 762501 1083500 800900 792499 685100 734099 875701 897799
- 평균 : 819,760 ns
(출처 : https://chb2005.tistory.com/73)
두 가지 사항을 적용하면 해결된당!!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] arr = br.readLine().split("");
LinkedList<String> list = new LinkedList<>(Arrays.asList(arr));
int m = Integer.parseInt(br.readLine());
ListIterator<String> iter = list.listIterator();
while(iter.hasNext()) {
iter.next();
}
for (int i = 0; i < m; i++) {
String[] input = br.readLine().split(" ");
if (input[0].equals("P")) {
iter.add(input[1]);
} else if (input[0].equals("L")) {
if (iter.hasPrevious())
iter.previous();
} else if (input[0].equals("D")) {
if (iter.hasNext())
iter.next();
} else if (input[0].equals("B")) {
if (iter.hasPrevious()) {
iter.previous();
iter.remove();
}
}
}
for(String str : list) {
bw.write(str);
}
bw.flush();
bw.close();
}
}
'Java' 카테고리의 다른 글
[백준 20438] 출석체크 (JAVA) (0) | 2023.03.22 |
---|---|
[백준 14889] 스타트와 링크 (JAVA) (0) | 2023.03.20 |
[백준 1629] 곱셈 (JAVA) (0) | 2023.03.12 |
[백준 2740] 행렬 곱셈 (JAVA) (0) | 2023.03.12 |
[백준 10830] 행렬 제곱(JAVA) (0) | 2023.03.12 |