컴공댕이 공부일지
221117 EC.crew : 스택과 큐 본문
728x90
[ 2022년 11월 17일 정모 문제 풀이 모음 ]
🧚♂️알고리즘🧚♂️ - 스택.큐
⭐️ 스택 / 큐 ⭐️ 자료구조의 일종 스택 - 후입선출(LIFO, Last-In-First-Out) 구조 가장 마지막에 삽입된 자료가 가장 먼저 삭제된다 위치 top : 삽입(push)과 삭제(pop)가 일어나는 위치 연산 list.append(da
junggoldchae-coding.tistory.com
#1.
미해결 (시간 초과... 배열 초기화때문에 시간 초과...? 7퍼까지만 가구 안가...)
스택 수열 (백준 1874번)
#include <stdio.h>
void pop(int n, int top, int st[], int pm[]) {
for(int i=0; i<n; i++) {
if(st[i]==top) {
st[i]=0;
break;
}
}
for(int i=0; i<2*n; i++) {
if(pm[i]==0) {
pm[i]=1;
break;
}
}
}
void push(int n, int st[], int pushNum[], int pm[]){
int num=0;
for(int i=0; i<n; i++) {
if(pushNum[i]==0) {
pushNum[i]=1;
num=i+1;
break;
}
}
for(int i=0; i<n; i++) {
if(st[i]==0) {
st[i]=num;
break;
}
}
for(int i=0; i<2*n; i++) {
if(pm[i]==0) {
pm[i]=-1;
break;
}
}
}
//st배열의 제일 위의 값 찾는 함수.
int findTop(int n, int a[]) {
int ans=0;
for(int i=0; i<n; i++) {
if(a[i]==0) {
ans=a[i-1];
break;
}
}
return ans;
}
int main()
{
int n;
scanf("%d", &n);
int arr[n]; //기준값
int st[n]; //통
int pushNum[n]; //push이미 한 수 체크하는 배열
int pm[2*n]; //+,-를 각각 1,-1으로 저장하기.
for(int i=0; i<n; i++) {
scanf("%d",&arr[i]);
}
for(int i=0; i<n; i++) {
st[i]=0;
pushNum[i]=0;
pm[2*i]=0;
pm[2*i+1]=0;
}
int k=0; //기준값 인덱스
int top=0;
int key=0;
while(k<n) {
top=findTop(n, st);
if(top>arr[k]) {
printf("NO\n");
key=1;
break;
} else if(top==arr[k]) {
pop(n, top, st, pm);
k++;
} else{
push(n, st, pushNum, pm);
}
}
if(key!=1) {
for(int i=0; i<2*n; i++) {
if(pm[i]==1) {
printf("+\n");
} else if(pm[i]==-1) {
printf("-\n");
}
}
}
return 0;
}
728x90
'기록 > EC.crew 정기 모임 정리' 카테고리의 다른 글
230327 EC.crew 4기 3주차 정모 (★2579 계단 오르기) (0) | 2023.03.27 |
---|---|
230320 EC.crew 4기 2주차 정모 (★백준 1004 어린왕자) (0) | 2023.03.20 |
221110 EC.crew : 그리디 알고리즘 (0) | 2022.11.10 |
221103 EC.crew : 구간 합 부분 합 (0) | 2022.11.05 |
220929 EC.crew (0) | 2022.09.29 |
Comments