본문 바로가기

D.evelop [CS]/Algorithm34

[알고리즘 이론] 정렬 Sort - 2-3. 비교 기반 알고리즘 (삽입 정렬) 💡예시에 대한 가정 - 입력 크기 n - 입력 배열 A[0…. n-1] - 입력 데이터 : 양의 정수 - 정렬 방식 : 오름차순 (1, 2, 3, 4,…) 2-3) 삽입 정렬 (Insertion sort) 주어진 데이터를 하나씩 뽑은 후, 이미 나열된 데이터들이 항상 정렬된 상태를 갖도록 바른 위치를 찾아 뽑은 데이터를 삽입해서 나열하는 방식 정렬 부분 A[0…k-1] 과 미정렬 부분 A[k…n-1] 으로 구분해서 처리 정렬 과정 미정렬 부분 A[k…n-1]에서 1번째 데이터를 뽑아 정렬 부분 A[0…k-1]에서 올바른 자리에 삽입 입력 데이터 A [10, 30, 40, 20, 70, 50, 60] 1️⃣. 입력데이터를 정렬부분과 미정렬 부분으로 나눈다. 2️⃣. 미정렬 부분의 첫번째 데이터 20을 뽑는.. 2024. 4. 24.
[알고리즘 이론] 정렬 Sort - 2-2 비교 기반 알고리즘 (버블 정렬) 💡예시에 대한 가정 - 입력 크기 n - 입력 배열 A[0…. n-1] - 입력 데이터 : 양의 정수 - 정렬 방식 : 오름차순 (1, 2, 3, 4,…) 2-2) 버블 정렬 (Bubble sort) 모든 인접한 두 데이터를 차례로 비교 후, 왼쪽 데이터가 더 큰 경우 오른쪽 데이터와 자리를 바꾸는 방식을 반복 정렬 과정 : 비교 진행 방향 →, ← 에 따라 비교 비교 진행 방향에 따라 정렬 과정이 달라짐 • 왼 → 오 : 큰 값 부터 찾아 오른쪽 끝 부터 위치 (오른쪽 끝부터 정렬) …. < 세 번째로 큰< 두번째로 큰 < 가장 큰 • 왼 ← 오: 가장 작은 값부터 찾아 왼쪽 끝부터 위치 (왼쪽 끝부터 정렬) 가장 작은 < 두 번째로 작은 < 세번째로 작은 < ….. 왼쪽 → 오른쪽 50과 20을 비교.. 2024. 4. 22.
[알고리즘 이론] 정렬 Sort - 2-1. 비교 기반 알고리즘 (선택 정렬) 💡예시에 대한 가정 - 입력 크기 n - 입력 배열 A[0…. n-1] - 입력 데이터 : 양의 정수 - 정렬 방식 : 오름차순 (1, 2, 3, 4,…) 2-1) 선택 정렬 (Selection sort) 입력 배열에서 가장 작은 값부터 순서대로 선택해서 나열하는 방식 정렬 과정 📍배열 A = [60, 90, 30, 10] (0단계) 1. 미정렬 부분에서 최솟값을 찾음 = 10 A = [60, 90, 30, 10] 2. 이 최솟값과 미정렬 부분의 첫 번째 데이터[60] 비교 10 과 60 비교 : 10 은 60보다 작다. (조건 만족) A = [60, 90, 30, 10] 3. 조건만족 시, 위치를 교환 -> 이 과정을 반복 A = [10, 90, 30, 60] 미정렬 부분에서 정렬 시작 (1단계) 최소.. 2024. 4. 18.
[알고리즘 이론] 정렬 Sort - 1. 기본 개념 1. 기본 개념 1) “정렬(Sort)”이란? 주어진 데이터를 값의 크기 순서에 따라 재배치 하는 것 대표 : 오름차순(Ascending), 내림차순(Descending) 2) 정렬 구분 기준 : 정렬이 수행되는 시점에 데이터가 어디에 저장되어 있는가? ✅ 내부 정렬 컴퓨터 내에 있는 주기억 장치에 데이터가 있음 전체 데이터 위치 : 주기억장치에 저장 → 정렬 수행 외부 정렬 주기억 장치 밖에 데이터가 있음 (주기억장치에 모든 데이터를 저장 할 수 없는 경우) 전체 데이터 위치 : 보조 기억장치 → 필요한 일부 데이터만 반복적으로 주기억장치로 옮겨 → 정렬 수행 3) 내부 정렬의 정렬 방식 📍point - 몇 번 비교 했는가 vs 몇 번 이동했는가! 비교 기반 알고리즘 어떤 값을 비교할 때, 직접 적으로.. 2024. 4. 18.
[Algorithm 030] JS - 자연수 뒤집어 배열로 만들기 (Level 01) 문제 출처 : 프로그래머스 prorammers - 자연수를 뒤집어 배열로 만들기 (링크) 문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한사항 n은 10,000,000,000이하인 자연수입니다. A. 내가 푼 답 function solution(n) { var answer = []; do{ answer.push(n % 10); n = Math.floor(n / 10); }while(n > 0) return answer; } 자료형의 변화를 최소화하여 푸는 방식 do...while과 %(나머지 연산자)를 사용 전에 풀었던 하샤드 수 구하기, 정수 내림차순으로 배치하기와 비슷한 로직이라 금방 풀 수 있.. 2021. 12. 2.
[Algorithm 029] JS - 정수 내림차순으로 배치하기 (Level 01) 문제 출처 : 프로그래머스 prorammers - 정수 내림차순으로 배치하기 (링크) 문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한사항 n은 1이상 8000000000 이하인 자연수입니다. 처음 접근 법 숫자값에 변화를 주지 않고 사용해보려 생각했다. 하샤드 수 문제와 비슷하게 10으로 나눈 나머지 값으로 각 자릿 수를 때어내 접근 할 수 있을 것이라 생각했다. function solution(n) { var answer = n; var arr = [] do{ arr.push(answer % 10); } while(answer > 0) ret.. 2021. 11. 22.
[Algorithm 028] JS - 최대공약수와 최소공배수 (Level 01) 문제 출처 : 프로그래머스 prorammers - 평균 구하기 (링크) 문제 설명 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다. 제한사항 두 수는 1이상 1000000이하의 자연수입니다. 일단 초등수학교육을 까마득히 잊고 지내서, 최대공약수와 최소공배수가 뭔지 기억이 안납니다...🥲 공약수가..뭐? 서로소?? 이렇게 정리하니 한결 보기편해졌다. 최대공약수 : 두 수를 완벽히 나누어 떨어지게 (나머지가 0이게)할 수 있는 제일 큰 수 36 / 12.. 2021. 11. 16.
[Algorithm 027] JS - 제일 작은 수 제거하기 (Level 01) 문제 출처 : 프로그래머스 prorammers - 평균 구하기 (링크) 문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 제한사항 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. A. 내가 푼 답 function solution(arr) { var answer = arr; answer.splice(answer.indexOf(Math.min(...arr)), 1); if (answer.len.. 2021. 11. 14.