본문 바로가기

기타/42Seoul

[42Seoul] push_swap 서브젝트 정리 - yepark

push_swap 서브젝트 정리

- push_swap 서브젝트는 프로그램을 2개 만들어야 합니다.

- 본 프로젝트는 물리넷이 작용하지 않으며 사람이 평가합니다.

- 파일의 이름은 checker, push_swap 으로 정확히 명시해주세요.

- Makefile 만들어야합니다. 그리고 이전에 만든 libft 사용해도 됩니다.

- 전역변수 금지.

- c로만 짜시면 됩니다. 놈 검사를 합니다.

- 오류처리 및 예외처리를 잘해야 합니다. 만약에 Segmentation fault, bus error, double free, etc 등 발생 시 0점

- 메모리 누수나면 0점

- 사용가능 시스템 함수

◦ write ◦ read ◦ malloc ◦ free ◦ exit

 

게임 규칙

a 와 b 라는 이름의 2개의 스택이 있습니다

a = 중복되지 않은 양수 또는 음수 랜덤하게 가지고 있습니다.

b = 비어있음

목표는 a를 오름차순 하는 것 (명령어를 최소로 사용하여)

 

할 수 있는 액션

sa -> swap a = a의 index 0과 index 1을 스왑 요소가 1개 또는 0개면 아무 변화 없다.

sb -> swap b = b의 index 0과 index 1을 스왑 요소가 1개 또는 0개면 아무 변화 없다.

ss -> sa + sb at the same time 

pa -> push a = b의 index 0 을 a의 index 0에 올림 b의 요소가 없으면 아무 변화 없음.

pb -> push b = a의 index 0 을 b의 index 0에 올리 a의 요소가 없으면 아무 변화 없음.

ra -> rotate a = a스택의 요소를 1개씩 위로 이동시킴 index 0은 마지막이 됩니다.

rb -> ratate b = b스택의 요소를 1개씩 위로 이동시킴 index 0은 마지막이 됩니다.

rr -> ra + rb at the same time

rra -> reverse rotate a = a스택의 요소를 1칸씩 아래로 이동시킴 마지막 요소는 첫번째 요소가 됩니다.

rrb -> reverse rotate b = b스택의 요소를 1칸씩 아래로 이동시킴 마지막 요소는 첫번째 요소가 됩니다.

rrr -> rra + rrb at the same time

 

checker 프로그램

checker 프로그램의 매개변수로 int형 list를 적습니다. 첫번째 인자는 top of stack 즉 stack a의 index 0입니다.

stack a에 아무 값도 없으면 그냥 아무 반응 안합니다.

 

체커는 표준입력 즉 명령어 입력을 기다리고. 개행 즉 엔터하면 gnl을 사용하여 읽고 명령어에 맞게 실행시킵니다.

만약 a가 정렬되있고 b가 비어있으면 "OK\n"입니다. 다른 경우 "KO\n" (gnl 오류)

 

체커 인자에 이상한 값(정수가 아니거나 정수 범위를 넘거나 중복이거나 ) 들어가 있으면 "Error\n"

명령이 잘 못 들어가면 "Error\n"

push_swap 프로그램

간단하게 보면

이렇게 뜸

 

check  프로그램의 매개변수로 int형 list를 적습니다. 첫번째 인자는 top of stack 즉 stack a의 index 0입니다.

stack a에 아무 값도 없으면 그냥 아무 반응 안합니다.

 

오름차순으로 바꾸면서(우리가 짜야할 알고리즘이랄까) 쓰는 명령어들을 \n을 두고 나열 해야합니다

오류도 "오류" 개행 해야합니다.

 

검증 방법

저희는 위에서 만든 프로그램 두개로 아래와 같이 프로그램을 실행 시켜서 명령어의 갯수와 정렬이 제대로 되는지를 확인할 수 있습니다.

보너스는 안할꺼지롱~