티스토리 뷰

c언어 알고리즘/큐와 스택

백수진 2021. 3. 3. 20:31

첫 번째 궁금증, what?

큐가 무엇인가?

 

 queue란, first input first out의 구조를 가지는 배열입니다.

- queue를 사용해 데이터의 순서를 기록해, 먼저 들어간 데이터가 먼저 나오기 위해 사용하는 배열입니다.


두 번째 궁금증, why?

왜 큐를 사용하는가?

 

"순서"에 중요한 의미를 가지기 때문

큐는 FIFO 구조를 가지기에, "순서"를 중요시하는 알고리즘을 작성해야하는 경우에 사용하기 적합하다.

- 은행상담을 위한 번호표( 발급된 번호표 순서대로 호출해야한다 - 먼저온사람이 먼저 업무를 진행할 수 있도록)

 


세 번째 궁금증,how?

어떻게 사용하면 되는가?

 

1. input에 대해

 

queue에 데이터를 "input"할 때는 기존에 있는 데이터의 뒤쪽, 즉 가장 뒤쪽으로 넣어줘야합니다.

함수 : en_queue()함수를 생성해 구현할 수 있습니다.

- main()함수에서 호출되면 인수를 넘겨받아야하기에, en_queue(int a)등으로 괄호안에 넘겨받을 인수와 관련된 변수의 자료형 및 변수명을 정의합니다.

변수 : 마지막 데이터의 위치를 기억할 변수로 저는 보통 "head"를 사용합니다.

 

2. output에 대해

 

queue에 데이터를 "output"할 때는 기존에 있는 데이터의 가장 앞의 데이터를 꺼내와야합니다.

함수 : del_queue()함수를 생성해 구현할 수 있습니다.

- main함수에서 넘겨받는 인자가 없고 queue에 저장된 값만 꺼내면 되기때문에 괄호안은 생략합니다.

- 만약 out된 인수를 main에서 호출하기 위해서는 인수의 자료형을 고려해 함수를 작성합니다.

변수 : 가장 앞에 있는 변수의 위치를 저장할 변수로 저는 보통 "tail"로 정의하여 사용합니다.


www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

1. input

 

2. output

카드를 한장 버리고 가장 위에 있는 카드를 뒤로 넘긴다 -> 패턴 한번당 delqueue를 두번수행할 때 첫번째 값은 의미가 없고 두번째 수행할 때의 값은 다시 넣어줘야하기에 en_queue(del_queue())의 형식으로 작성