Push_Swap 서브젝트 정리

lamPolar·2022년 7월 20일
0

42seoul

목록 보기
1/5

🂳 Subject : GAME_RULES

♦︎ Beginning

A, B : stack
A : 랜덤한 양의 중복되지 않은 음수, 양수들을 포함
B : empty

👉 서브젝트의 목표

stack "A" 에 모든 수들을 ascending order로 정렬시키기
👇 목표달성을 위해, 아래의 명령들을 수행가능

  • sa : A의 가장 위에 있는 두 원소의 위치를 서로 바꾸기. 만약 1개의 원소만 있거나, 스택이 비어있으면 아무것도 하지 않음.
  • sb : B의 가장 위에 있는 두 원소의 위치를 서로 바꾸기. 만약 1개의 원소만 있거나, 스택이 비어있으면 아무것도 하지 않음.
  • ss : sa + sb
  • pa : B에서 맨 위에 있는 원소를 A의 맨 위로 이동. B가 비어 있으면 아무 것도 하지 않음.
  • pb : A에서 맨 위에 있는 원소를 B의 맨 위로 이동. A가 비어 있으면 아무 것도 하지 않음.
  • ra : A의 모든 원소들을 위로 1 인덱스만큼 이동. 첫 번째 원소는 마지막 원소가 됨.
  • rb : B의 모든 원소들을 위로 1 인덱스만큼 이동. 첫 번째 원소는 마지막 원소가 됨.
  • rr : ra + rb
  • rra : A의 모든 원소들을 아래로 1 인덱스만큼 이동. 마지막 원소는 첫 번째 원소가 됨.
  • rrb : B의 모든 원소들을 아래로 1 인덱스만큼 이동. 마지막 원소는 첫 번째 원소가 됨.
  • rrr : rra + rrb

✅ 서브젝트 허용 함수 및 제약 조건

  • read, write, malloc, free, exit
  • 제출 가능 파일 : Makefile, .h, .c
  • push_swap 이라는 이름의 프로그램을 제출
    프로그램은 스택 a에 들어갈 값들을 정수 리스트의 형태로 포맷팅하여 인자로 받고, 첫 번째 인자는 스택의 탑이 된다(순서에 유의할 것).
  • ft_printf and any equivalent YOU coded
  • No global variables
  • 프로그램은 stack A를 정렬시키기 위해서 필요한 명령의 가장 작은 개수의 리스트 (the smallest list of instructions) 와, 정렬이 완료된 후 stack A의 가장 작은 원소 (the smallest number being at the top)를 출력해야 한다.
  • 목표는 가능한 적은 개수의 명령어 집합으로 스택을 정렬하는 것이다.
    프로그램에서 도출한 명령어의 수와 허용된 최대 작업수를 비교하고, 프로그램에 너무 큰 리스트가 표시되거나 목록이 제대로 정렬되지 않은 경우에는 0점.
  • 에러 처리 방법 : Error와 줄바꿈('\n')을 표준 에러에 출력. 에러는 일부 인자가 정수가 아니거나, 정수 범위를 초과하거나, 중복이 있는 경우를 포함한다.
  • checker_OS 프로그램이 KO를 출력하면, push_swap 의 명령어 리스트가 정수 리스트를 정렬하지 못했음을 의미한다.

♣︎ 보너스

이 프로젝트는 단순하기 때문에, 기능을 추가할 여지가 거의 없네요. 그러나, 당신만의 <strong>체커</strong>를 만들어 보는건 어떨까요?
네? 뭐라구요? 단순해요? 거짓말하지마.....
checker 프로그램은 당신의 push_swap이 출력하는 instruction들이 실제로 stack을 제대로 정렬하는지 알려준다.

push_swap 테스트 방법

실행 명령어 예시 #> 출력 예시
./push_swap 2 1 3 6 5 8 #> sa\n pb\n pb\n pb\n sa\n pa\n pa\n pa\n
./push_swap 0 one 2 3 	#> Error
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

profile
불안을 안고 구르는 작은 모난 돌

0개의 댓글