본문 바로가기
42seoul/circle-2

[push_swap] 0. 과제 이해하기

by saniii 2022. 3. 5.

Description

This project involves sorting data on a stack, with a limited set of instructions, and the smallest number of moves. To make this happen, you will have to manipulate various sorting algorithms and choose the most appropriate solution(s) for optimized data sorting.

이 프로젝트는 제한된 명령어 집합과 가장 적은 수의 이동으로 스택의 데이터를 정렬하는 것을 포함한다. 이를 위해서는 다양한 정렬 알고리즘을 조작하고 최적화된 데이터 정렬에 가장 적합한 솔루션을 선택해야 합니다.

 

#keyword

Sorting algorithms / 정렬 알고리즘
Battery concept and handling elements / 배터리 개념 및 취급 요소
Algorithm implementation / 알고리즘 실행

 

#Skills

Imperative programming / 명령형 프로그래밍
Unix
Rigor / 엄격함
Algorithms & AI

 

 

[ 과제 이해하기 ]

 이 프로젝트를 통해 주어진 스택에 대해 제한된 명령어 집합을 가능한 적게 사용하여 정렬해야한다. 

다양한 유형의 알고리즘을 이용하여 데이터 정렬에 최적화된 가장 적합한 솔루션을 선택하시오. 

 

#서론

Push_swap는 매우 간단하고 효과적인 알고리즘인 정렬에 관한 프로젝트.

정수값들의 집합, 2개의 스택, 두 스택을 조작하는 명령어 집합이 주어짐

입력받은 정수 인자들을 정렬하는 push_swap 명령어를 사용하여 가장 작은 프로그램을 계산하고 표준출력에 출력.

 

 

# GOAL

- C언어

- 정밀하게 알고리즘을 생각하고 C언어를 사용하여 작성한다.

- 알고리즘의 복잡도에 대해서 살펴야한다. 

정렬 알고리즘을 통해 복잡도라는 개념을 만날 수 있다. 
초기값들의 순서에 따라 가장 효율적인 알고리즘이 달라 질 수 있기 때문에 가장 빠른 방법으로 정렬하는 알고리즘을 찾는 것은 어렵다. 

 

더보기

# General Instructions

- 실행 파일의 이름은 push_swap

- 프로젝트를 컴파일하고 기본적인 규칙을 포함하는 Makefile이 제출되어야한다. 필요시에만 재컴파일되어야한다.

- 이 프로젝트에 라이브러리를 포함할 것이다. libft 폴더와 그 안에 자체 Makefile을 넣어서 제출해라. Makefile은 라이브러리와 프로젝트 모두 컴파일해야 한다

- 전역 변수는 사용할 수 없다.

- 노미네이트

- 에러처리를 세심하게 해야한다, 예상치 못하게 종료되면 안된다. (Segmentation fault, bus error, double free, etc)

- 메모리 누수(memory leaks)가 나면 안된다.

- 사용가능한 함수 

  • write
  • read
  • malloc
  • free
  • exit

 

# Mandatory

  •  두 개의 스택 A와 B가 있다. 
  • A는 서로 중복되지 않는 음수 혹은 양수인 난수들을 포함한다.
  • B는 비어있다.
  • 스택 A에 오름차순으로 수를 정렬하자.
  • 다음 연산들을 수행할 수 있다.
    • sa : 스택 A의 가장 위에 있는 두 원소의 위치를 서로 바꾼다.
    • sb : 스택 B의 가장 위에 있는 두 원소의 위치를 서로 바꾼다.
    • ss : sa와 sb를 동시에 실행
    • pa : 스택 B의 가장 위에 있는 원소를 A의 가장 위로 옮긴다.
    • pb : 스택 A의 가장 위에 있는 원소를 B의 가장 위로 옮긴다.
    • ra : 스택 A의 모든 원소들을 위로 1만큼 올린다. 첫 번째 원소는 가장 아래로 내려간다. 
    • rb : 스택 B의 모든 원소들을 위로 1만큼 올린다. 첫 번째 원소는 가장 아래로 내려간다.
    • rr : ra와 rb를 동시에 실행
    • rra : 스택 A의 모든 원소들을 아래로 1만큼 내린다. 마지막 원소는 가장 위로 올라간다.
    • rrb : 스택 B의 모든 원소들을 아래로 1만큼 내린다. 마지막 원소는 가장 위로 올라간다.
    • rrr : rra와 rrb를 동시에 실행

 

- push_swap이라는 이름의 프로그램을 작성해야한다. 

- 이 프로그램은 스택 A에 들어갈 값들을 정수 리스트의 형태로 포맷팅하여 인자로 받는다.

- 첫번째 인자가 스택의 탑이 된다. 

- 프로그램은 반드시 스택 A를 정렬하는데 가능한 가장 자근 개수의 명령어 리스트를 출력해야한다.

- 명령어들은 '\n'으로만 구분되어야 한다.

- 목표는 가능한 적은 개수의 명령어 집합으로 스택을 정령하는 것. 

- 에러의 경우, Error와 줄바꿈을 표준 에러에 출력해야 한다. 

     > 일부 인자가 정수가 아니거나, 정수 범위를 초과하거나, 중복이 있는 경우

 

 

 

 

 

 

### vscode 변수 이름 한번에 바꾸기 (in MAc)

command + shift + l(L)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글