티스토리 뷰

#include <stdio.h>
#include <stdlib.h>
//en,de
//back
//size
//init
//empty

typedef struct Node {
	int data;
	struct Node *next;
}Node;

typedef struct Queue {
	Node *front;
	Node *rear;
	int count;
}Queue;

void queue_init(Queue *queue)
{
	queue->front = queue->rear = NULL;
	queue->count = 0;
}

int queue_empty(Queue *queue)
{
	return queue->count == 0;
}

void queue_push(Queue *queue, int data)
{
	Node * newNode = (Node*) malloc(sizeof(Node));
	newNode->data = data;
	newNode->next = NULL;
	if(queue_empty(queue)) queue->front = newNode;
	else queue->rear->next = newNode;
	queue->rear = newNode;
	queue->count++;
}

void queue_pop(Queue *queue)
{
	
	int data;
	Node *ptr;
	ptr = queue->front;
	data = ptr->data;
	queue->front= ptr->next;
	free(ptr);
	queue->count--;
	
}

int main(void)
{
	Queue queue;
	queue_init(&queue);
	int n;
	scanf("%d", &n);
	
	int max = 0;
	int behind = 0;
	
	for(int i=0; i<n; i++) {
		int tmp;
		scanf("%d", &tmp);
		if(tmp == 1) {
			scanf("%d", &tmp);
			queue_push(&queue, tmp);
		} else if(tmp == 2) {
			queue_pop(&queue);
		}
		if(queue.count > max) {
				max = queue.count;
				behind = queue.rear->data;
		} else if(queue.count == max) {
				if(behind > queue.rear->data)
				behind = queue.rear->data;
		}
	}
	
	printf("%d %d", max, behind);
}

 

 

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

 

26042번: 식당 입구 대기 줄

첫 번째 정보부터 n번째 정보까지 순서대로 처리한 다음, 식당 입구에 줄을 서서 대기하는 학생 수가 최대가 되었던 순간의 학생 수와 이때 식당 입구의 맨 뒤에 대기 중인 학생의 번호를 빈칸을

www.acmicpc.net

 

 

0.  Queue을 만든다

-c++기준으로

.push //큐에 집어넣음, 넣을 때 마다 새로운 노드를 동적할당

.pop //큐에서 빼냄, 나가는 노드에 대한 할당을 풀어줌

.size //큐의 크기

.empty //비워져있는가?

.init //큐 만든다음에 바로 초기화

 

1.

1이 입력되면, 한 번의 입력을 더 받은 다음

큐에 집어넣는다.

 

2가 입력되면, 큐에서 하나의 노드를 뺀다

 

 

2.

1.의 과정 이후, 큐의 길이를 통해, 기다리는 사람의 최댓값과, 그 때의 뒤에있는 사람을 구한다.

 

만약 길이가 같은 경우에는, 뒤에 기다리는 사람이 더 숫자가 낮은지를 비교해 보아야 한다.

 

 

주의할 점

구조체 내부의 요소를 사용하는 것은 .

구조체 타입의 포인터에 간접연산을 할 때는 ->

을 사용한다.

 

., -> 사용할 때, 구조체 타입인지, 아니면 구조체 타입의 포인터인지를 잘 보고 사용하면 오류가 안뜬다.

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함