728x90
https://www.acmicpc.net/problem/23253
23253번: 자료구조는 정말 최고야
위 그림처럼 책이 쌓여 있으므로, 첫 번째 더미 - 두 번째 더미 - 첫 번째 더미 - 두 번째 더미 순으로 꺼내면 책 번호순으로 나열할 수 있다.
www.acmicpc.net
#include <stdio.h> // 자료구조는 정말 최고야
#include <stdlib.h>
typedef struct
{
int* ptr;
int** stk;
}STACK;
int is_empty(STACK *s, int m)
{
int check;
for (int i = 0; i < m; i++)
{
if (s->ptr[i] <= 0)
{
check = 1;
}
else
{
check = 0;
break;
}
}
return check;
}
void push(STACK *s, int idx, int data)
{
s->stk[idx][s->ptr[idx]++] = data;
}
int top(STACK *s, int idx)
{
int temp = s->ptr[idx];
if (temp <= 0)
return 0;
else
return s->stk[idx][--temp];
}
void pop(STACK *s, int idx)
{
s->ptr[idx]--;
}
int main()
{
int n, m;
scanf("%d %d", &n, &m);
STACK s;
s.ptr = malloc(sizeof(int) * m);
s.stk = malloc(sizeof(int) * m);
for (int i = 0; i < m; i++)
{
s.ptr[i] = 0;
s.stk[i] = malloc(sizeof(int) * n);
}
for (int i = 0; i < m; i++)
{
int k;
scanf("%d", &k);
for (int j = 0; j < k; j++)
{
int book;
scanf("%d", &book);
push(&s, i, book);
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < n; j++)
{
if (top(&s, j) == i)
{
pop(&s, j);
break;
}
}
}
if (!is_empty(&s, m))
{
printf("No");
}
else
{
printf("Yes");
}
return 0;
MEMO
-- 메모리 초과로 실패
!! 실패이지만 올린 이유 --> 스택을 2차원 배열을 이용해서 구현한게 조금 생소해서 기억하기 위해서 !!
728x90
728x90
'백준[baekjoon] > C언어' 카테고리의 다른 글
백준(baekjoon) [C] - 11866번: 요세푸스 문제 0 (0) | 2023.01.22 |
---|---|
백준(baekjoon) [C] - 1966번: 프린터 큐 (0) | 2023.01.22 |
백준(baekjoon) [C] - 2164번: 카드2 (0) | 2023.01.21 |
백준(baekjoon) [C] - 2493번: 탑 (0) | 2023.01.21 |
백준(baekjoon) [C] - 2557번: 화학식량 (0) | 2023.01.19 |