백준 10845번: 큐

kgh128·2023년 1월 24일

코드: https://github.com/kgh128/Problem-Solving/blob/main/src/Baekjoon/p10845.java


1. Queue 클래스 구현

멤버 변수는 실제 정수를 저장할 int 배열 queue와 큐의 가장 앞에 있는 정수의 인덱스를 가리키는 frontIndex, 큐의 가장 뒤에 있는 정수의 인덱스를 가리키는 backIndex이다. 멤버 함수는 생성자 Queue(), 주어진 명령을 처리할 push(), pop(), size(), empty(), front(), back()이다.

명령의 수는 최대 10,000개이므로 큐에 저장되는 정수의 개수도 최대 10,000개이다. (push 명령이 10,000번 나오는 경우) 따라서 Queue()에서 queue의 크기가 10,000개가 되도록 초기화한다. 또한 처음에는 배열이 비어있으므로 frontIndex는 0으로, backIndex는 -1로 초기화한다. 이에 대한 자세한 이유는 아래의 문단과 같다.

frontIndexpop()이 호출될 때 +1이 되고, backIndexpush()가 호출될 때 +1이 된다. queue안에 정수가 1개 있으면 frontIndexbackIndex는 같아진다. 이 상태에서 pop()이 호출되면 queue가 비워지고, frontIndex는 +1이 되어 backIndex < frontIndex이 된다. 이것이 empty()에서 쓰이는 queue가 빈 상태인지 확인하는 조건이다.

size()에서 queue에 저장된 정수의 개수를 계산하는 수식은 backIndex - frontIndex + 1이다. queue가 비어있을 때의 frontIndexbackIndex의 관계를 정확히 표현하면 frontIndex = backIndex + 1이다. 위의 수식에 이 관계식을 집어넣으면 0이 나오므로 queue가 비어있을 때도 해당 수식을 적용할 수 있다.


2. 명령 처리

String[] command = br.readLine().split(" ");

위의 코드로 명령을 입력받는다. command[0]이 명령의 키워드(push, pop, size, empty, front, back)이므로 command[0]과 일치하는 명령의 키워드를 찾는다. (if (command[0].equals("push")) 형식)

  • push 명령은 큐에 넣을 정수가 command[1]로 존재한다. Stringcommand[1]을 정수로 바꾸고 queue.push(x)를 호출하여 처리한다.

  • 나머지 명령은 command[1]이 존재하지 않으므로 Queue 클래스의 객체인 queue를 통해 명령에 맞는 메소드를 호출하여 처리한다.

0개의 댓글