push_swap - subject 목표

숌 개발 공부 블로그·2021년 5월 15일
0

push_swap

목록 보기
1/2

Game rules

  • 이 게임은 a 와 b라는 이름의 2개의 스택으로 구성되어 있습니다

  • 시작하기에 앞서:

    • a 는 중복되는 수 없이 양 혹은 음 의 임의의 수를 가지고 있습니다
    • b 는 비어있습니다
  • 목표는 오름차순으로 숫자를 스택으로 정렬하는 것입니다.

  • 이를 수행하기 위해 다음과 같은 작업을 할 수 있습니다:

    • sa : swap a - 스택a 의 맨 위에 있는 두 요소를 바꿉니다. a의 수가 하나이거나 없는 경우 아무일도 일어나지 않습니다
    • sb : swap b - 스택b 의 맨 위에 있는 두 요소를 바꿉니다. b의 수가 하나이거나 없는 경우 아무일도 일어나지 않습니다
    • ss : sa 와 sb 가 동시에 일어납니다
    • pa : push a - b의 맨 위에 있는 요소를 a 맨 위에 넣습니다. b가 비어있는 경우 아무일도 일어나지 않습니다
    • pb : push b - a의 맨 위에 있는 요소를 b 맨 위에 넣습니다. a가 비어있는 경우 아무일도 일어나지 않습니다
    • ra : rotate a - 스택 a에 있는 모든 요소들을 한칸씩 이동합니다. (올라갑니다) 맨 첫번째 요소는 맨 뒤로 갑니다.
    • rb : rotate b -스택 b에 있는 모든 요소들을 한칸씩 이동합니다. (올라갑니다) 맨 첫번째 요소는 맨 뒤로 갑니다.
    • rr : ra 와 rb 가 동시에 일어납니다
    • rra : reverse rotate a - 스택 a 에 있는 모든 요소들을 한칸씩 낮아집니다. 맨 마지막 요소가 맨 앞으로 옵니다
    • rrb : reverse rotate b - 스택 b 에 있는 모든 요소들을 한칸씩 낮아집니다. 맨 마지막 요소가 맨 앞으로 옵니다
    • rrr : rra 와 rrb 가 동시에 일어납니다.

push_swap 프로그램

  • 당신은 push_swap 이라는 프로그램을 만들어야합니다. 이 프로그램은 정수 리스트로 포맷된 스택을 인자로 받습니다. 첫번째 인자는 스택의 맨 위에 있어야 합니다.

  • 이 프로그램은 스택a를 정렬하는 최소한의 수의 명령들을 표시하여야 합니다.

  • 명령어들은 '\n' 으로 구분되어야 합니다. (그외엔 아무것도 없어야 합니다)

  • 목표는 가능한 가장 적은 수의 명령어로 스택을 정렬하는 것입니다. 디펜스하는 동안 프로그램이 발견한 명령어의 수와 허용되는 최대 작업 수를 비교합니다. 프로그램이 목록을 너무 크게 표시하거나 목록을 제대로 정렬하지 않으면 점수를 받지 못합니다.

  • 에러의 경우, Error 표시와 함꼐 '\n' 이 standard error로 출력되어야 합니다. 에러의 예시로는 : 정수가 아니거나, int보다 크거나 중복된 인자의 경우

  • 인트라넷에 체커프로그램이 있는데, 정렬이 되어있으면 OK 아니라면 KO가 나옵니다.

  • 보너스

    정수 리스트로 포맷된 스택을 인수로 가져올 checker라는 이름의 프로그램을 작성합니다. 첫 번째 인수는 스택의 맨 위에 있어야 합니다(순서에 주의). 인수가 지정되지 않으면 검사기가 중지되고 아무것도 표시되지 않습니다.

    • 그런 다음 체커는 기다렸다가 표준 입력에 대한 지침을 읽고, 각 지침은 '\n' 뒤에 나옵니다. 모든 지시사항을 읽으면, 체커는 인수로 받은 스택에서 지시사항을 실행할 것이다.

    • 이러한 명령을 실행한 후 스택 a가 실제로 정렬되고 b가 비어 있으면 검사기는 "OK"를 표시하고 표준 출력에 '\n'을 표시해야 합니다. 모두다

      다른 경우, 검사기는 표준 출력에 "KO" 다음에 "\n"을 표시해야 합니다.

    • 에러 발생 시 에러를 표시하고 표준 에러 발생 시 '\n'을 표시하여야 합니다.

      오류에는 다음과 같은 오류가 있습니다. 일부 인수는 정수가 아니거나 정수보다 크거나, 중복되거나, 명령이 없거나, 잘못된 인수도 있습니다.

      평소와 같이 GiT 저장소에서 작업을 제출하십시오. 리포지토리의 작업만 등급이 지정됩니다.

      모두에게 행운을 빕니다!

0개의 댓글