Push_swap이란?

<aside> 💡 최대한 적은 명령어를 사용하여 stack을 정렬하는 과제

</aside>

알고리즘

보통 정렬이라고 하면 버블, 선택, 퀵, 병합 등 그런 알고리즘을 생각하지만, 이 과제는 조금 다릅니다. 이 과제에서의 목표는 얼마나 빠르게 정렬하는 것이 목표가 아니라 얼마나 적은 명령어를 사용하여 stack을 정렬하는 과제입니다.

이 과제에서 많이들 사용하는 알고리즘은 아래와 같이 있는데:

저는 그리디 알고리즘을 택했습니다.

왜 그리디냐, 병합, 퀵, 모래시계, 그리디 이 4개의 알고리즘에 대한 설명을 들었을 때 개인적으로 모래시계와 그리디가 제일 쉬워보였습니다. 모래시계를 해보고 싶긴 했으나, 다들 모래시계 알고리즘은 너무 이 과제만을 위한 알고리즘이라고 하여 이참에 그리디도 조금 익숙해질 겸 그리디로 풀었습니다. (그리디와 모래시계 알고리즘은 명령어 개수 최적화하기 쉽습니다!)

과제 요구 사항

stack 2개를 사용하여 stack a에 있는 수를 오름차순으로 정렬하는 것

stack이란?

자료구조의 일종으로, 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)로 이루어져 있습니다. 자료를 넣는 것을 '밀어 넣는다' 하여 push, 반대로 넣어둔 자료를 꺼내는 것을 pop이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 푸쉬한 자료부터 나오게 됩니다.

Untitled

명령어

먼저 넣은 값이 나중에, 나중에 넣은 값이 먼저 나오는 구조를 가진 stack을 활용하여 푸는 과제이기 때문에 우리가 사용할 수 있는 명령어는 다음과 같이 생겼습니다.

swap