알고리즘 14

정렬 - 선택정렬

선택 정렬(Selection Sort)이란?선택 정렬은 배열을 정렬하는 가장 기본적인 알고리즘 중 하나로, 다음과 같은 방식으로 동작합니다:배열에서 가장 작은 요소를 찾아 첫 번째 위치로 이동합니다.그다음, 두 번째 요소부터 남은 요소 중 가장 작은 값을 찾아 두 번째 위치로 이동합니다.이 과정을 반복하여 배열 전체를 정렬합니다.🔹 시간 복잡도최선, 평균, 최악의 경우 모두 O(n²)이유: 각 요소를 확인하며 남은 요소에서 최솟값을 찾기 때문   const selectionSort = (arr) => { const len = arr.length; for (let i = 0; i 첫 번째 반복문 (i)배열을 한 요소씩 순회하면서 정렬할 위치를 결정합니다.minIndex를 현재 i로 설정합니다. (..

알고리즘 2025.03.14

정렬 - 버블정렬(Bubble Sort)

버블 정렬(Bubble Sort)란?버블 정렬은 서로 인접한 두 개의 값을 비교하면서 정렬하는 방식으로, 작은 값을 왼쪽으로, 큰 값을 오른쪽으로 이동시킵니다.마치 거품(Bubble)이 물 위로 올라가는 것처럼 가장 큰 값이 반복적으로 오른쪽 끝으로 이동하므로 **버블 정렬(Bubble Sort)**이라고 불립니다.정렬 동작 과정예제 배열:[5, 3, 6, 4, 1]1회전(첫 번째 바깥 루프)각 숫자를 비교하여 큰 값을 오른쪽으로 이동[5, 3, 6, 4, 1] → [3, 5, 6, 4, 1] (5와 3 교환)[3, 5, 6, 4, 1] → [3, 5, 6, 4, 1] (5와 6 그대로 둠)[3, 5, 6, 4, 1] → [3, 5, 4, 6, 1] (6과 4 교환)[3, 5, 4, 6, 1] → ..

알고리즘 2025.03.14

약수 구하기

약수를 구하는 알고리즘에는 몇 가지 방법중 가장 일반적이고 효율적인 방법기본적인 방법:1부터 해당 숫자까지 모든 수로 나누어 보는 방법입니다.시간 복잡도: O(n)제곱근을 이용한 최적화 방법:숫자의 제곱근까지만 검사하는 방법입니다.시간 복잡도: O(√n)제곱근을 이용한 최적화 방법의 알고리즘은 다음과 같습니다:주어진 수 n의 제곱근까지 반복합니다.i가 n의 약수라면, i와 n/i 모두 약수입니다.i와 n/i가 같지 않은 경우에만 두 수를 모두 약수 목록에 추가합니다.예를들어 36의 약수를 구하면 const res=[1]; const divisor=n=>{ let i=2; for(i; ia-b));n = 36Math.sqrt(36) = 6, 따라서 i는 1부터 6까지 반복합니..

알고리즘 2024.09.12

재귀함수 -> 꼬리물기 재귀함수 -> 반복문

재귀함수를 꼬리 재귀 함수로 변환하고, 그 다음 반복문으로 변환하는 것은 재귀 호출을 명시적인 반복 구조로 바꾸는 과정입니다. 꼬리 재귀는 함수의 마지막 작업이 자기 자신을 호출하는 형태로, 이론적으로는 반복문으로 쉽게 변환할 수 있습니다.꼬리 재귀를 반복문으로 바꾸는 이유는 스택오버플로우 때문입니다.그렇게 때문에 꼬리재귀함수 와 반복문간의 코드 변환은 자유자재로 할수 있어야 합니다.재귀함수 문제 중에서 다른 문제로는 다음과 같은 것들이 있습니다.https://www.youtube.com/watch?v=h80tLv0fn88&list=PLBNdLLaRx_rKOFzA3txlG5rf9ZaVUuvmv&index=210분정도 후 부터 tail recursion 보시면 됩니다. 1. 피보나치 수열피보나치 수열은 각..

알고리즘 2024.08.20

JAVA Trie(트라이) 연습문제

Trie(트라이)를 이용한 문자열 검색 아래 문자열 저장한뒤 to tea app 검색할 문자열로 검색 (to) JAVA Trie(트라이) 연습문제 import java.util.*; public class Main { public static void main(String[] args) { Trie head = new Trie(); head.insert("to"); head.insert("tea"); head.insert("tonight"); if(head.prefixSearch("to")) { System.out.println("ooo"); } else { System.out.println("xxx"); } } } class Trie { private TrieNode root; public Trie()..

알고리즘 2020.09.24

[알고리즘] 완주하지 못한 선수

출처 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수�� programmers.co.kr 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작..

알고리즘 2020.09.16

[알고리즘] 배열에서 두개의 숫자 뽑아서 더하기

https://programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한� programmers.co.kr 문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는..

알고리즘 2020.09.16

[알고리즘] 약수의 합을 구하시오

https://programmers.co.kr/learn/courses/30/lessons/12928 코딩테스트 연습 - 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수 programmers.co.kr 문제 설명 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 nreturn 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28..

알고리즘 2020.09.16

[알고리즘] 두 정수사이의 합

https://programmers.co.kr/learn/courses/30/lessons/12912 코딩테스트 연습 - 두 정수 사이의 합 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우 programmers.co.kr 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 ..

알고리즘 2020.09.16