그리디

    [자바스크립트] 그리디 (Greedy) 알고리즘

    그리디(Greedy) 알고리즘 지금 순간에 가장 최적의 해를 선택하는 알고리즘 다음과 같이 위에서 아래로 이동하면서 거쳐가는 노드의 합이 가장 큰길을 찾고자 한다면 그리디 알고리즘은 아래와 같이 찾아냅니다. 노드 5에서 봤을 때는 다음으로 가장 높은 수가 100이므로 100을 선택하고, 100에서는 30을 선택합니다. 하지만 실제로 가장 높은 노드의 합은 5에서 10을 거쳐 500으로 가는 길입니다. 이렇듯 그리디 알고리즘은 항상 최적의 해를 보장해주지는 못합니다. 그리디 알고리즘은 이럴 때 좋습니다 근사 알고리즘 위에서 봤다시피 항상 최적의 해를 보장해주지는 못하지만, 어느 정도 최적에 근사한 답을 알려줍니다. 그래서 "적당히 괜찮은 해답"을 얻기 위해서는 최적의 알고리즘입니다. 또한 뒤의 경우를 더 ..

    [프로그래머스 LV2] 조이스틱 문제 풀이 (Javascript)

    문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다. - 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다. - 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다. - 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다. 따라서 11번 이동시켜 "JAZ"를 ..

    [프로그래머스 LV2] 큰 수 만들기 문제 풀이 (Javascript)

    문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 1자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 입출력 예 number k return "1924" 2 "94" ..

    [프로그래머스 LV1] 체육복 문제 풀이 (Javascript)

    문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를..

    [알고리즘] 그리디 알고리즘 알기

    그리디 알고리즘 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미 그리디 해법은 정당성 분석이 중요하다. - 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토 매 상황에서 가장 큰 값만 고르는 것이다. 일반적인 상황에서는 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다. (그 순간만 판단하기 때문에) 그리디 알고리즘을 설명하기 위해 자주 등장하는 예시 문제라고 한다. 가장 큰 단위 화폐부터 돈을 거슬러 주면 된다. 1260원을 거슬러 줘야한다고 할 때 500원부터 거슬러주면, 500 x 2 = 1000, 100원 => 100 x 2 = 200, 50원 => 50 x 1 = 50, 10원 => 10 x 1 = 10 이런 식으로 그럼 이렇게 큰 화폐 단위부터 ..