230108 TIL+ 백준 2164번: 카드2 (JAVA)

won·2023년 1월 8일
0

알고리즘 문제풀이

목록 보기
3/32

TIL

큐 관련 문제를 풀어보았다.
자바 Queue 클래스를 사용해서..

Queue(큐) 클래스

import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>();

LinkedList를 이용하여 생성한다.
두가지 import문이 필요하다.

queue.add(1); // 1 추가
queue.offer(2) // 2 추가

queue.peek() // 첫번째 값 참조 (1)
queue.poll // 첫번째 값을 반환하고 제거 (1 반환 후 제거)
queue.remove // 첫번째 값 제거 (2 제거)
queue.clear() // queue 초기화
queue.size() // 큐의 사이즈 반환

백준 2164번: 카드2

https://www.acmicpc.net/problem/2164

큐의 메소드만 잘 활용하면 쉽게 풀 수있다.

  1. 제일 위에 있는 카드를 바닥에 버린다. => queue.remove()

  2. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
    => queue.poll() 로 반환 값을 얻은 뒤
    queue.offer() 혹은 queue.add()로 다시 반환 값을 추가한다.

3. 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다.
=> 이게 중요하다. 입력 값으로 1을 주었을 때 런타임 에러가 나지 않도록 처리해준다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;

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));
		
		Queue<Integer> queue=new LinkedList<>();
		
		int n= Integer.parseInt(br.readLine());
		int a=0;
		for(int i=1;i<=n;i++) {
			queue.offer(i);
		}
		
		while(queue.size()!=1) { //입력 값 1의 대한 처리
			queue.remove();
			if(queue.size()==1) { //카드가 한 장만 남으면 break;
				break;
			}else {
				a=queue.poll();
				queue.offer(a);
			}
		}
	
		bw.write(String.valueOf(queue.poll()));
		bw.flush();
		bw.close();
		br.close();
	}
}

BufferedWriter로 출력할 때 문자가 자꾸 깨져서 String.valueOf() 로 처리 해 주었다.
Sysout 으로 출력하면 문제가 안 생기는데.. 왜 그럴까

profile
뭐라도 하자

0개의 댓글