/*
7
0123456
push( 512 )
top()
push( 7 )
push( 3 )
top()
pop()
size()
*/
/*
#include <stdio.h>
int stack[201];
int top=0;
void push(int data)
{
stack[++top]=data;
}
int main()
{
int n,i,cnt=0;
char arr[201]= {};
scanf("%d ",&n);
for(i=0; i<n; i++)
{
gets(arr);
if(arr[0]=='p'&&arr[1]!='o')
{
int num=0;
for(int j=6;arr[j]!=' ';j++)
{
num= num*10+(arr[j]-'0');
}
push(num);
}
else if(arr[0]=='p'&&arr[1]=='o')
{
if(top!=0)
{
top--;
}
}
else if(arr[0]=='s')
{
cnt=top;
printf("%d\n",cnt);
}
else if(arr[0]=='e')
{
if(top==0)
{
printf("true\n");
}
else
{
printf("false\n");
}
}
else if(arr[0]=='t')
{
if(top==0)
{
printf("-1\n");
}
else
{
printf("%d\n",stack[top]);
}
}
}
return 0;
}
*/
/*
쇠막대기
#include <stdio.h>
int top=0; //놓인 막대 갯수
int main()
{
char arr[100001]={};
int i,cnt=0; //조각 갯수
scanf("%s",arr);
for(i=0; arr[i]!=0; i++)
{
if(arr[i]=='(')
{
if(arr[i+1]==')') //레이저
{
cnt+=top;
i++;
}
else //막대기 시작
{
top++;
}
}
else //막대기 끝
{
top--;
cnt++;
}
}
printf("%d",cnt);
return 0;
}
Queue 큐
front : 마지막으로 데이터가 나간 곳의 위치
rear : 마지막으로 데이터가 들어온 곳의 위치 (top)
enqueue (push) rear++;
dequeue (pop) front++;
*/
/*
#include<stdio.h>
int queue[5];
int rear=-1, front=-1;
void enq(int data)
{
rear++;
queue[rear]=data;
}
int deq()
{
if(front==rear)//empty
return -1;
front++;
return queue[front];
}
void view()
{
printf("queue : ");
for(int i=front+1;i<=rear;i++)
{
printf("%d ",queue[i]);
}
printf("\n");
}
int main()
{
enq(1);
enq(2);
enq(3);
view();
deq();
view();
}
정렬
오름차순 or 내림차순
5 1 4 2 3 -> 1 2 3 4 5
1. 구현 easy but 성능 bad ( slow, memory++)
ex) 버블, 선택, 삽입
2. 구현 hard but 성능 good (fast, memory --)
ex) 퀵, 기수, 병합, 힙, .... (특수경우)
*/
#include <stdio.h>
int a[10001];
int n, i, j, temp,flag=0;
int main(){
scanf("%d", &n);
for (i=1; i<=n; i++)
scanf("%d", &a[i]);
for(i=1; i<n; i++)
{
flag=0;
for(j=1;j<=n-i;j++)
{
if (a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag=1;
}
}
if(flag==0)
{
break;
}
}
printf("%d ", i-1);
return 0;
}



