주어진 스택에 들어가있는 무작위의 정수들을 ra, rr등의 제한된 명령어 집합을 구현하고, 이를 활용해 최소한의 명령어 호출로 스택을 정렬할 수 있는 순서를 출력해주는 함수
실행 예시
$> ./push_swap 2 1 3 6 5 8 sa pb pb pb sa pa pa pa
- sa
swap a - 스택 a의 가장 위에 있는 두 원소(혹은 첫 번쨰 원소와 두 번째 원소)의 위치를 서로 바꾼다.- sb
swap b - 스택 b의 가장 위에 있는 두 원소(혹은 첫 번쨰 원소와 두 번째 원소)의 위치를 서로 바꾼다.- ss
sa와 sb를 동시에 실행한다.- pa
push a - 스택 b에서 가장 위(탑)에 있는 원소를 가져와서, 스택 a의 맨 위(탑)에 넣는다. 스택 b가 비어 있으면 아무 것도 하지 않는다.- pb
push b - 스택 a에서 가장 위(탑)에 있는 원소를 가져와서, 스택 b의 맨 위(탑)에 넣는다. 스택 a가 비어있으면 아무 것도 하지 않는다.- ra
rotate a - 스택 a의 모든 원소들을 위로 1 인덱스 만큼 올린다. 첫 번째 원소(탑)는 마지막 원소(바텀)가 된다.- rb
rotate b - 스택 b의 모든 원소들을 위로 1 인덱스 만큼 올린다. 첫 번째 원소(탑)는 마지막 원소(바텀)가 된다.- rr
a와 rb를 동시에 실행한다.- rra
reverse rotate a - 스택 a의 모든 원소들을 아래로 1 인덱스 만큼 내린다. 마지막 원소(바텀)는 첫 번째 원소(탑)가 된다.- rrb
reverse rotate b - 스택 b의 모든 원소들을 아래로 1 인덱스 만큼 내린다. 마지막 원소(바텀)는 첫 번째 원소(탑)가 된다.- rrr
rra와 rrb를 동시에 실행한다.
- 숫자들을 입력받을시 1 2 3 으로만 들어오는게아닌 1 "7 5 6" 9 2 등의 여러 방법으로 들어오는것 역시 처리해주어야함.
- 중복된 값이 들어올 시 오류로 처리해주어야함
- 숫자가 아닌 다른 값이 들어온다면 오류로 처리해주어야함
- 정수 범위를 초과한 값이 들어올시 오류로 처리해주어야함
- 명령어들은 \n으로 구분되어야 함
- 에러의 경우 Error와 줄바꿈을 표준에러로 출력해야함
int main(int argc, char **argv) { t_deque *deq_a; t_deque *deq_b; t_deque *deq_str; deq_a = make_deque(); // a deq 초기화 deq_b = make_deque(); // b deq 초기화 deq_str = make_deque(); // 출력할 명령어들을 저장할 deq 초기화 check_argv(argc, argv); // 실행시 받아온 값들이 유효한 값인지 확인 if (push_in_deq(argc, argv, deq_a)) // a deq에 받아온 값들을 넣어줌 return (free_all(deq_a, deq_b, deq_str)); start_sort(deq_a, deq_b, deq_str); // 정렬 opt_str(deq_str); // 정렬을 위한 명령어 최적화 print_deq(deq_str); // 명령어 출력 return (free_all(deq_a, deq_b, deq_str)); }