42Seoul - Cursus : push_swap

eelijus·2022년 6월 29일
0

42Seoul - Cursus

목록 보기
2/11

두 스택에 무작위로 들어오는 숫자들을 최소한의 명령어를 사용해 오름차순으로 정렬하는 문제

개요

a,  b 두개의 스택 존재

프롬프트에 ./push_swap 일련의 숫자들 을 입력한다
Ex) ./push_swap 5 3 1 2 4

그럼 a 스택에 아래와 같은 형태로 숫자가 쌓인다
최소한의 sort 명령어를 사용해, 결과적으로 a스택에 모든 숫자들이 오름차순으로 정렬되게 해야함.

명령어
sa, sb, ss
pa, pb
ra, rb, rr
rra, rrb, rrr

예외처리

  1. 숫자가 1개 들어왔을 경우
    -> 프로그램 종료(정렬 완료)
  2. 숫자가 0개 들어왔을 경우
    -> 에러 메세지 반환

fill_a 함수 개요

./push_swap 4 2 5 3 1 이렇게 들어왔을 시 a 스택에 역순으로 담겨야함.

argv[1]부터 널까지 split : 구분자 공백으로 array에 담자

array는 이중포인터를 사용해 할당 array[0] = "1" ... array[4] = "4"

parse_integer() 함수 개요

argv로 2 3 1 이런 형태의 정수만이 아니라, -2 +3 1 뭐 이런 수도 들어올 수 있음.

전부 다 정제된 정수 형태로 파싱하기 위한 함수

write 함수 첫번째 인자

0 : 표준입력

1 : 표준출력

2 : 표준오류

우리는 오류를 출력할거기 때문에 write(2, "Error\n", 6); 의 형태 사용

exit();

stdlib.h 헤더파일을 include

현재 프로세스 내 파일입출력중인 것을 저장 + 종료하여 운영체제에 권한을 넘긴다

exit(0) : 정상종료

exit(1) : 에러메세지 종료

즉 return = exit(0);

스택 a에서 피봇을 정함. 피봇보다 작거나 같은 값을 스택 b로 옮긴다.

b에 쌓인 숫자들 중에서 피봇을 정함. 크거나 같은 숫자들을 a 스택으로 넘긴다.

C언어 : 포인터

스택 구현은 연결리스트로 했다.

노드들은 링크를 두개 가지고 있는데, 각각 전후와 연결된다. 예외로 tail 노드의 next 노드는 널이다.

profile
sujileelea

0개의 댓글