본문 바로가기

알고리즘13

[알고리즘]동적 계획법(Dynamic Programming/DP) 동적 계획법(Dynamic Programming) 동적계획법이란 복잡한 문제를 간단한 여러개의 문제로 나누어 푸는 방법을 말한다. 연산이 진행될 때 처음 진행되는 연산은 기억해두고, 이미 진행해서 저장이 되어있는 연산이라면 저장되어 있는 값을 가지고 오는 원리이다. 이렇게 미리 계산해서 저장해둔 결과를 활용해서 중복 연산을 줄이는 방식을 메모이제이션이라고 한다. 메모이제이션을 이용하면 중복되는 하위문제를 조금 더 효율적으로 해결할 수 있다. 모든 방법을 일일이 계산해서 최적의 해를 찾아내는 방식의 알고리즘이다. 그래서 시간이 오래걸린다는 단점이 있지만 최적의 해를 찾는데에 오류가 발생할 수 없다는 장점이 있다. 동적 계획법은 큰 문제를 작은 문제로 쪼개어 해결할 수 있어야 하고, 동일한 부분 문제가 여러.. 2023. 7. 27.
[프로그래머스]그리디(탐욕법)_조이스틱(Level 2/JS) 오늘은 그리디 알고리즘에 대해 적어보려고 한다. 그리디 알고리즘은 탐욕법이라고도 하며 현재 선택이 나중에 미칠 영향에 대해서는 고려하지 않고 현재 상황에서 지금 당장 좋은 것을 고르는 방법을 의미한다. 프로그래머스에서 해당하는 문제로는 Level 2 조이스틱 문제를 풀이해봤다. 조이스틱 문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로.. 2023. 7. 11.
[프로그래머스]Hash_완주하지 못한 선수(JS/Level 1) 오늘은 해시를 주제로 푼 두개의 문제를 리뷰하면서 해시(hash)개념을 함께 정리해보려고 한다. hash hash는 key와 value를 가지는 자료구조 형태이다. hash는 배열로 미리 Hash Table 크기만큼 생성해서 사용한다. 공간은 많이 사용하지만 key를 이용하여 데이터를 찾기 때문에 속도를 빠르게 만드는 특징을 가지고 있다. JS에서 hash를 풀이하는 방법으로 Map을 사용할 수 있다. new Map() : Map 객체를 만들때 쓰인다. map.set(key, value) : key를 이용해 value값을 저장한다. map.get(key) : key에 해당하는 value를 반환한다. - 완주하지 못한 선수 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외.. 2023. 7. 7.
[알고리즘]퀵 정렬(Quick Sort)_JS 퀵 정렬 퀵 정렬은 분할정렬과 비슷하게 배열에서 임의의 값을 하나 정해서 그 값보다 작으면 왼쪽으로, 중간값보다 크면 오른쪽으로 보내는 과정을 통해 정렬을 진행한다. 분할정렬과 다른점이 있다면 분할정렬은 새로 배열을 만들어 메모리를 비교적 많이 차지한다는 점이고, 퀵 정렬은 재귀를 통해 정렬하는 과정이므로 비교적 메모리를 적게 소모한다는 점이다. 3 22 14 59 1 92 9 이런 배열이 있다고 가정해보자 배열의 중간 값과 나머지 배열과 비교해 작은 값들은 왼쪽, 큰 값들은 오른쪽으로 정렬한다 ([3, 22, 14, 1, 9], 중간 값 59, [92]) 재귀함수로 나누어진 왼쪽과 오른쪽 배열에도 똑같은 과정을 거친다. ([3, 1, 9], 중간 값 14, [22]) 그렇게 모든 배열이 정렬될 때까지 .. 2022. 12. 12.
728x90
반응형