public class Sequence {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder stb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
Stack<Integer> st = new Stack<Integer>();
st.push(1); stb.append("+\n");
int number = 0, value = 1;
while (t > 0) {
number = Integer.parseInt(br.readLine());
while (number > value) {
value++;
st.push(value); stb.append("+\n");
}
int top = st.pop();
if( top != number ){
stb.delete(0, stb.length());
stb.append("NO");
break;
}else{
if(t == 1) stb.append("-");
else stb.append("-\n");
}
t--;
}
System.out.println(stb.toString());
}
}
BufferedWriter
의 br.close()
는 내부적으로 br.flush()
후 진행된다.
즉 BufferedWriter
를 열은채로 둘 수도 없기때문에 사용하면 닫아야하고 buffer는 무조건 출력된다.
쌓아둔 buffer를 지우는 마땅한 메서드는 없는 듯 하므로 buffer를 출력하지 않아야 하는 분기가 있다면 BufferWriter
말고 StringBuilder
를 쓰자.
public class Bang {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken());
String[] a = br.readLine().split(" +");
Queue<Integer> q = new LinkedList<>();
for (int i = 1; i <= n; i++) {
q.offer(i);
}
int total_count = 0, len = n;
for (String aa : a) {
int head = q.peek(), count = 0;
while (!Integer.valueOf(aa).equals(head)) {
q.offer(q.poll()); count++;
head = q.peek();
}
total_count += Math.min(count, len-count);
q.poll(); len--;
}
System.out.println(total_count);
}
}
기본 Stack 클래스는 FILO 메서드만 제공하고
기본 Queue 인터페이스는 FIFO 메서드만 구현한다.
양쪽으로 삽입/삭제가 필요할 때는 Deque 인터페이스를 구현하자.