https://www.acmicpc.net/problem/15828
15828번: Router
인터넷을 사용하기 위해서는 컴퓨터에 인터넷 회선을 연결하거나 Wi-Fi를 연결해야 한다. 이렇게 연결된 네트워크를 통해 컴퓨터에는 통신이 가능하다. 마음에 드는 노래나 동영상이 있는 곳에
www.acmicpc.net
18258에서 사용한 queue와 BufferedReader사용
라우터에서 0이 들어오면 패킷 하나를 처리했다는 것을 의미하기 때문에 q에서 상단의 데이터를 하나 지워준다.
-1이 들어온다면 입력이 끝났다는 것을 의미하기 때문에 break를 걸어서 while 문을 빠져나오게 한다.
나머지 패킷 입력은 q버퍼의 N개 이상의 데이터가 저장되있지 않는 한 지속적으로 데이터를 q에 저장한다.
마지막 for문에서 혹시 고려하지 못한 q 버퍼의 데이터가 남아있는 것을 방지하기 위해 null이 아닐때만 StringBuilder에 저장하고 문장이 끝나면 StringBuilder를 한번에 print해준다 이는 18258에서 사용한 이유와 같이 시간복잡도를 줄이기 위한 방법이다. 물론 이러한 방법을 사용하면 메모리가 많이 소요된다는 단점이 있다.
package BjPack;
import java.util.*;
import java.io.*;
public class _15828 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Queue<Integer> q = new LinkedList<Integer>();
StringBuilder strB = new StringBuilder();
BufferedReader buffR = new BufferedReader(new InputStreamReader(System.in));
Integer N = 0, tm = 0;
N = Integer.parseInt(buffR.readLine());
//데이터 받아서 q에 저장
while(true) {
tm = Integer.parseInt(buffR.readLine());
if(tm == -1) break;
else if(tm == 0) q.remove();
else if(N > q.size()) q.add(tm);
}
if(q.isEmpty()) {
System.out.printf("empty");
return;
}
for(int i = 0; i < N; i++) {
//q에서 N만큼 데이터 꺼내기 null 제외
tm = q.poll();
if(tm != null)
strB.append(tm + " ");
}
String pintStr = strB.toString();
System.out.printf("%s", pintStr);
}
}
'2022 하반기 > algorithm' 카테고리의 다른 글
백준 2226 java (0) | 2023.01.08 |
---|---|
백준 2164 java (0) | 2023.01.08 |
백준 18528 java (0) | 2023.01.08 |
댓글