728x90
1. 문제
2. 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class BOJ_18258_큐2 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
LinkedList<Integer> queue = new LinkedList<>();
StringBuilder sb = new StringBuilder();
StringTokenizer st;
while (N-- > 0) {
st = new StringTokenizer(in.readLine());
switch (st.nextToken()) {
case "push":
queue.add(Integer.parseInt(st.nextToken()));
break;
case "pop":
if(queue.isEmpty()) sb.append("-1\n");
else sb.append(queue.poll()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
if(queue.isEmpty()) sb.append("1\n");
else sb.append("0\n");
break;
case "front":
if(queue.isEmpty()) sb.append("-1\n");
else sb.append(queue.peek()).append("\n");
break;
case "back":
if(queue.isEmpty()) sb.append("-1\n");
else sb.append(queue.get(queue.size()-1)).append("\n");
break;
}
}
System.out.print(sb);
}
}
큐 문제였지만 Queue를 이용하지 않고 LinkedList를 Queue처럼 사용했다. "back" 명령 때문에 get함수가 필요했기 때문이다. Deque을 사용할까 생각도 해봤지만 어차피 Queue를 LinkedList로 구현하고 있어서 그 부분만 수정했다. (쓰면서 생각해보니 Deque으로 바꿔도 코드 한줄만 수정하면 됐겠다...)
3. 결과
아래는 예전에 짠 코드. 다른 건 모두 동일하고 이 부분만 다르다.
sb.append(queue.poll()).append("\n");
위△가 지금 코드, 아래▽가 예전 코드. 이 코드 한 줄 차이로 메모리와 시간이 아주 미세하게 차이가 난다.
sb.append(queue.poll()+"\n");
알게된 점(String의 +연산, StringBuilder의 append 비교)
찾아보니 String의 +연산은 메서드 내부에서 StringBuilder를 사용하기 시작하면서(JDK 1.5~) 성능이 그 전보다 나아졌지만, 여전히 +연산을 할 때마다 새로운 StringBuilder 객체를 생성하기 때문에 내가 직접 StringBuilder를 사용하는 것보다 느리다.
저번에 알아본 결과 append함수가 arraycopy를 이용했기 때문에 간단하게 +연산하는 것보다 더 느릴 거라고 생각했는데 완전히 반대의 결과라서 신기하다.
[이 글]에 정리했다.
4. 참고한 글
https://madplay.github.io/post/difference-between-string-stringbuilder-and-stringbuffer-in-java
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 11866 요세푸스 문제 0 - JAVA (0) | 2022.02.06 |
---|---|
[BOJ] 2164 카드2 - JAVA (0) | 2022.02.06 |
[BOJ] 17298 오큰수 - JAVA (0) | 2022.02.05 |
[BOJ] 1874 스택수열 - JAVA (0) | 2022.02.05 |
[BOJ] 4949 균형잡힌 세상 - JAVA (0) | 2022.02.05 |
댓글