1) push_swap - subject

sorikikikim·2021년 7월 29일
0

push_swap

목록 보기
1/1

Mandatory part

1. 프로그램명

push_swap

2. Makefile

필수

3. 전역변수

금지

4. Libft 사용

가능

5. 0점 처리

Segmentation fault, bus error, double free, memory leaks

6. 외부 함수

write, read, malloc, free, exit

7. 설명

  • 이 게임은 a와 b라는 이름의 두 개의 스택으로 이루어져 있다.
  • 게임은 다음과 같은 상태에서 시작한다.
    - a는 서로 중복되지 않는 음수 혹은 양수인 난수들을 포함한다.
    - b는 비어있다.
  • 목표는 스택 a에 오름차순으로 수를 정렬하는 것이다.

8. 필요한 연산 명령어

  • 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 : ra와 rb를 동시에 실행한다.

  • rra : reverse rotate a - 스택 a의 모든 원소들을 아래로 1 인덱스 만큼 내린다. 마지막 원소(바텀)는 첫 번째 원소(탑)가 된다.

  • rrb : reverse rotate b - 스택 b의 모든 원소들을 아래로 1 인덱스 만큼 내린다. 마지막 원소(바텀)는 첫 번째 원소(탑)가 된다.

  • rrr : rra와 rrb를 동시에 실행한다.

예시

-------------------------------------------------------------------------------
Init a and b:
2
1
3
6
5
8
_ _
a b
-------------------------------------------------------------------------------
Exec sa:
1
2
3
6
5
8
_ _
a b
-------------------------------------------------------------------------------
Exec pb pb pb:
6 3
5 2
8 1
_ _
a b
-------------------------------------------------------------------------------
Exec ra rb (equiv. to rr):
5 2
8 1
6 3
_ _
a b
-------------------------------------------------------------------------------
Exec rra rrb (equiv. to rrr):
6 3
5 2
8 1
_ _
a b
-------------------------------------------------------------------------------
Exec sa:
5 3
6 2
8 1
_ _
a b
-------------------------------------------------------------------------------
Exec pa pa pa:
1
2
3
5
6
8
_ _
a b
-------------------------------------------------------------------------------

10. "push_swap" 프로그램

  • push_swap이라는 이름의 프로그램을 작성해야 한다. 이 프로그램은 스택 a에 들어갈 값들을 정수 리스트의 형태로 포맷팅하여 인자로 받는다. 첫 번째 인자는 스택의 탑이 된다(순서에 유의해라).

  • 프로그램은 반드시 스택 a를 정렬하는데 가능한 가장 작은 개수의 명령어 리스트를 출력해야 한다.

  • 명령어들은 '\n'으로만 구분되어야 한다.

  • 목표는 가능한 적은 개수의 명령어 집합으로 스택을 정렬하는 것이다. 평가 도중에는 프로그램에서 도출한 명령어의 수와 허용된 최대 작업수를 비교한다. 프로그램에 너무 큰 리스트가 표시되거나 목록이 제대로 정렬되지 않은 경우 점수를 얻지 못한다.

  • 에러의 경우에는, Error와 줄바꿈("Error\n")을 표준 에러에 출력해야 한다. 에러는 다음 예시들을 포함한다: 일부 인자가 정수가 아니거나, 정수 범위를 초과하거나, 중복이 있는 경우이다.

예시

push_swap 실행결과

$> ./push_swap 2 1 3 6 5 8
sa
pb
pb
pb
sa
pa
pa
pa
$> ./push_swap 0 one 2 3
Error
$>

checker 이용시

$>ARG="4 67 3 87 23"; ./push_swap $ARG | wc -l
6
$>ARG="4 67 3 87 23"; ./push_swap $ARG | ./checker_OS $ARG
OK
$>

0개의 댓글