<aside> ⚠️ 유의사항

구현 순서

필요 조건

공통 부분 - 구문 분석

공통 부분 - 명령어

| pa (push a) | b의 맨 위에 있는 첫 번째 요소를 가져와서 a의 맨 위에 놓는다. b가 비어 있으면 아무 것도 하지 않는다. | | --- | --- | | pb (push b) | a의 맨 위에 있는 첫 번째 요소를 가져와서 b의 맨 위에 놓는다. a가 비어 있으면 아무 것도 하지 않는다. | | ss | sa와 sb를 동시에 사용한다. | | sa (swap a) | 스택 a의 맨 위에 있는 처음 2개의 요소를 교환한다. 요소가 하나만 있거나 없는 경우 아무 작업도 수행하지 않는다. | | sb (swap b) | 스택 b의 맨 위에 있는 처음 2개의 요소를 교환한다. 요소가 하나만 있거나 없는 경우 아무 작업도 수행하지 않는다. | | rr | ra와 rb를 동시에 사용한다. | | ra (rotate a) | 스택 a의 모든 요소를 1만큼 위로 이동한다. (첫 번째 요소가 마지막 요소로) | | ra (rotate a) | 스택 b의 모든 요소를 1만큼 위로 이동한다. (첫 번째 요소가 마지막 요소로) | | rrr | rra와 rrb를 동시에 사용한다. | | rra (reverse ra) | 스택 a의 모든 요소를 1만큼 아래로 이동한다. (마지막 요소가 첫 번째 요소로) | | rrb (reverse rb) | 스택 b의 모든 요소를 1만큼 아래로 이동한다. (마지막 요소가 첫 번째 요소로) |

스택 구현

typedef struct s_stack      t_st;

struct s_stack_node
{
		int 				 	 	 	 		num;   // 입력된 인자값 
		unsigned int  	 	 		idx;   // 입력된 전체 값에서의 순서
		struct s_stack_node 	*prev;
		struct s_stack_node 	*next;	
};

struct s_stack
{
		unsigned int					cnt;      // 현재 스택의 개수
		struct s_stack_node	 	*node[2]; // 노드의 시작과 끝을 저장
};

struct s_pushswap
{
		unsigned int			cnt;     // 전체 스택의 사이즈
		struct s_stack	 	a;
		struct s_stack	 	b;
};

enum e_rear
{
		FRONT = 0,
		REAR = 1
}

스택 조작