[42 Seoul] Push_swap - 과제 정리

현톨·2022년 10월 4일
0

42 서울 기록하기

목록 보기
3/8

기본 규칙

  • 당신은 두개의 스택 a와 b를 가지게 됩니다.
  • 시작하기 전에
    • 스택 a는 복제될 수 없는 무작위 갯수의 양수 혹은 음수를 포합합니다.
    • 스택 b는 비어있습니다.
  • 스택 a를 오름차순으로 정렬하는 것이 목표입니다. 이를 위해, 다음과 같은 작업을 수행할 수 있습니다.
    • 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의 요소들의 위치를 한칸씩 앞당깁니다.
      a의 첫번째 요소는 마지막 요소가 되어야합니다.
    • rb (rotate b): 스택 b의 요소들의 위치를 한칸씩 앞당깁니다.
      b의 첫번째 요소는 마지막 요소가 되어야합니다.
    • rr: ra와 rb를 동시에 합니다.
    • rra (reverse rotate a): 스택 a의 요소들의 위치를 한칸씩 밀어냅니다.
      a의 마지막 요소는 첫번째 요소가 되어야합니다.
    • rrb (reverse rotate b): 스택 b의 요소들의 위치를 한칸씩 밀어냅니다.
      b의 마지막 요소는 첫번째 요소가 되어야합니다.
    • rrr: rra와 rrb를 동시에 합니다.

예시

이러한 명령어의 효과를 설명하기 위해 임의의 정수 목록을 정렬해 보겠습니다.
이 예제에서는 두 스택이 모두 오른쪽에서 증가한다는 것을 고려합니다.

a의 정수들은 12개의 명령어를 통해 정렬되었습니다.

The "push_swap" program

  • 당신은 소스파일들을 컴파일할 Makefile을 제출해야하며, 이것은 relink 되어선 안됩니다.
  • 전역 변수 사용은 금지입니다.
  • 당신은 정수 목록으로 포맷된 스택 a를 인자로 받는 push_swap 프로그램을 작성해야합니다. 첫번째 인자는 스택의 맨 위에 있어야 합니다 (순서에 주의하세요!)
  • 명령어는 개행문자로만 구분되어야 하며, 그 외에는 구분되어선 안됩니다.
  • 목표는 가능한 최소한의 명령 횟수로 스택을 정렬하는 것 입니다. 평가를 진행하는 동안, 당신의 프로그램에서 나타난 명령 횟수는 허용되는 최대 횟수와 비교됩니다. 프로그램이 더 긴 목록을 표시하거나, 제대로 정렬되지 않을 경우 점수는 0점이 됩니다.
  • 매개변수가 없을 경우, 프로그램은 아무것도 표시하지 않고 프롬프트를 반환해야합니다.
  • 에러 케이스의 경우, 표준 오류에 Error와 개행문자를 출력해야합니다. 에러들은 인자가 정수가 아니거나, 정수보다 크거나 중복된 수가 있는 경우들을 포함합니다.


평가를 진행하면서, 평가를 올바르게 진행하기 위한 바이너리 파일이 제공되며 다음과 같습니다.

만약 checker_OS 프로그램이 KO를 출력하면, 그것은 당신의 push_swap 프로그램이 제대로 정렬되지 않은 목록을 만들었다는 것을 의미합니다.

profile
기록하는 습관 들이기

0개의 댓글