Algorithm
-
크레인 인형뽑기[카카오 기출] (스택)Algorithm/예제 2021. 3. 26. 23:06
문제 게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 ..
-
고급 정렬(2) - 퀵 정렬(quick sort)Algorithm/기본문제 2021. 3. 13. 14:11
기준점(pivot)을 정해서 기준점보다 작은 데이터는 기준점 좌측에, 큰 데이터는 우측에 배치하는 함수를 작성 각 왼쪽, 오른쪽은 재귀용법을 사용하여 다시 동일 함수를 호출하여 위의 작업을 반복함 함수는 (왼쪽 + 기준점 + 오른쪽) 배열을 리턴함 function quickSort(data) { if (data.length data[i]) { left.push(data[i]); } else { right.push(data[i]); } } return quickSort(left).concat([pivot].concat(quickSort(right))); }
-
고급 정렬(1) - 병합정렬(merge sort)Algorithm/기본문제 2021. 3. 13. 14:10
재귀 용법을 활용한 정렬 알고리즘 과정 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눔 각 부분 리스트를 재귀적으로 병합 정렬을 이용해 정렬함 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병 두 개의 함수를 통해 작업이 수행됨 첫 번째 함수: 리스트를 분리하고 각 분리된 리스트를 두 번째 함수를 통해 병합하여 리턴 리스트의 중간 인덱스를 기준으로 왼쪽, 오른쪽 리스트로 분리 각 분리된 리스트는 재귀 함수로 동일한 과정 진행 - 정렬 및 합병 과정 최종적으로 합병된 리스트가 리턴됨 두 번째 함수: 첫 번째 함수에 의해 쪼개진 리스트를 정렬된 하나의 리스트로 리턴 분리된 왼쪽, 오른쪽 리스트가 파라미터이며, 두 리스트를 정렬된 하나의 리스트로 만들어 반환 작업 시작 시, 각 리스트의 첫 번째..
-
기본 정렬(버블정렬, 선택정렬, 삽입정렬)Algorithm/기본문제 2021. 3. 13. 14:10
1. 버블정렬(bubble sort) (오름차순 기준)인접한 두 데이터를 비교하여 앞의 데이터가 뒤의 데이터보다 크다면 자리를 바꿈 정렬 1턴을 수행할 때마다 해당 턴의 맨 마지막 위치에 정렬이 완료된 데이터가 배치됨 각 턴의 마지막은 턴을 수행할 때마다 한 칸씩 앞으로 옴 어느 특정 턴에서 swap이 일어나지 않은 경우는 더 이상 정렬할 것이 없다는 의미이므로 이 경우 전체 정렬을 중단함 function bubbleSort(data) { for (let i = 0; i data[j + 1]) { [data[j], data[..
-
배열 채우기Algorithm/스킬 2021. 3. 11. 23:24
1. n의 크기를 가진 배열에 특정 데이터 1가지로 모두 채우기 (0으로 채우기) 1.1 fill() new Array(n).fill(0); 1.2 from() Array.from({ length: n }, () => 0); 2. 크기가 n인 배열에 오름차순 데이터로 채우기 2.1 0부터 n까지 오름차순으로 채우기 [...new Array(n).keys()] 2.2 특정 값 a부터 n개의 데이터를 오름차순으로 채우기 [...new Array(n).keys()].map(el => el + a) Array.from({ length: n }, (v, i) => i + a)