pushswap 로직 및 어려웠던점.

jw kim·2021년 9월 9일
0

push_swap

목록 보기
2/2
  1. 스택 할당 및 데이터 셋팅
  2. 정렬로직 진행
  3. 메모리 해제

전체적으로 위 세가지로 구성했다.

스택할당 및 데이터셋팅에서 겪었던 문제

./push_swap 4 93 2 1 의 경우와 ./push_swap $ARG 는 다르다.

1.1 두가지의 경우 실제 main 함수에서 받아들이는 인자값이 조금 달랐다.
컴파일된 프로그램 뒤에 인자로 직접 찍을경우 char 포인터 하나당 인자값 하나가 할당되어 들어왔지만 환경변수로 들어온 경우 하나의 포인터에 하나의 문자열 형태로 저장되어서 들어오는걸 몰랐음.

1.2 ex) ./push_swap 4 93 2 1 의 경우 char **argv
argv[1] = "4" argv[2] = "93" ... argv[5] = NULL
위와 같이 정렬되어 있겠지만,
ARG="4 93 2 1"로 할당해놓고 ./push_swap $ARG 로 입력시
argv[1] = "4 93 2 1" argv[2] = NULL 처럼 할당되어 들어옴.

1.3 해결책
split 함수를 이용해서 개별 인자값이 2개이상의 묶음 데이터일 경우도 분리해서 처리할 수 있도록 변경.

정렬로직

피벗 2개와 재귀함수를 이용해서 구현하였고,
구현중 세부적인 디테일에서 실수를 해서 디버깅 노가다 이외에 어려운점은 없었다.
알고리즘 로직 자체는
https://www.notion.so/push_swap-c15e62229b9541d78fadec4d6aae8b50 마지막 부분 참고해서 그대로 구현함.

메모리해제

사실 이부분을 하면서 많은 생각을 하게 되었다.
프로젝트 규모가 커져갈수록 가지처럼 뻗어나가는 각종 시나리오에서 모두 깔끔하게 작동되는 프로그램을 만드는게 목표이긴 하지만.... 코딩을 할수록 구조를 처음에 잘못구성하면 뒤로갈수록 대응하는게 귀찮아질수도 있고 깔끔해질수도 있다는걸 깨달았다..
처음 구조를 잘짜야 뒤탈이없다.... 그런데 구조는 프로그램을 많이 만들어봐야 알 수 있을것 같다...

profile
Hitchhiker

0개의 댓글