[알고리즘] 최단 경로 알고리즘 - JavaScript
·
알고리즘/풀이 힌트
최단 경로 알고리즘? 그래프에서 특정 정점에서 목적지까지 최단 경로를 구하는 알고리즘이다. 대표적인 최단 경로 알고리즘은 다음과 같다. DFS 다익스트라 벨만-포드 플로이드 와샬 목적에 따라 알고리즘을 선택할 수 있다. BFS, DFS 그래프의 간선 가중치가 모두 같을 때 적합하다. 2차원 배열로 구성된 지도에서 최단 거리를 찾아야 한다면 BFS, DFS로 푸는 경우가 많다. 다익스트라 알고리즘 그래프의 간선 가중치가 각각 다른 경우 적합하다. 우선 큐를 이용해서 만들 수 있으며, 시간 복잡도는 V가 정점의 수, E가 간선의 수라면 O(E log V) 이다. 작동 방법 1. 시작점을 제외한 모든 정점의 거리를 무한으로 설정한다. 시작은 0 2. 시작점을 선택한다. 3. 선택한 정점에서 갈 수 있는 정점의..
[알고리즘] 큰 수 만들기
·
알고리즘
들어가며 그리디 - JavaScript를 먼저 공부한 다음 푼 문제입니다. 바로 풀리지 않거나 설명이 필요하다면 참고하는 것을 추천드립니다. 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한조건 number는 2자리 이상, 1,000,000자리 이..
[알고리즘] 그리디 - JavaScript
·
알고리즘/풀이 힌트
그리디? 매 선택에서 지금 순간 가장 최적인 답을 선택하는 알고리즘이다. A에서 F로 이동할 때 전체 코스트로만 본다면 D로 가는 것이 더 빠르다. 하지만 그리디를 적용한다면 A 의 시점으로만 봤을 때는 B로 가는 것이 더 빠르기 때문에 B로 이동하게 된다. 이처럼 현재 시점의 최적의 답은 선택하지만 이것이 최적의 결과를 보장하지는 않는다. 그리디의 특징 보통 최적의 결과를 구하는 알고리즘보다 빠른 경우가 많다. 크루스칼, 다익스트라 알고리즘 등에 사용된다. 직관적인 문제를 풀 때 적합하다. 사용되는 방식 동전 반환 문제로, 큰 단위인 지폐, 동전 순으로 거스름돈을 만들 때 사용한다. 1860원을 먼저 가장 큰 단위인 1000원짜리 지폐로, 그 후 500원, 100원, 50원, 10원 순으로 구하면 빠르..
[JavaScript] 콘솔로 입력받기
·
JavaScript
자바스크립트를 하면 콘솔로 입력 받을 경우가 많지는 않다. ( 아닐수도 있지만 본인이 느끼기엔 ㅋㅋ ) 막상 필요해서 어떤 방식으로 구현할까 고민하던 중에 readline 이라는 패키지를 찾았다. const readline = require('readline'); const rl = redline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('What do you think of Node.js? ', (answer) => { console.log(`Thank you for your valueable feedback: ${answer}`); rl.close(); }); 간단하게 콘솔을 통해서 데이터를 입력 받을..
[JavaScript] 일반 함수 vs 화살표 함수
·
JavaScript
Array Function? 화살표 함수는 ES6에서 새롭게 추가되었다. function fun () { // 일반 함수 // ... } const arrFun = () => { // 화살표 함수 // ... } 화살표 함수 vs 일반 함수 1. this 여기서 바인딩이란 말이 많이 나올텐데, 바인딩이란 함수 호출과 실제 함수를 연결하는 방법이다. 동적 바인딩과 정적 바인딩으로 구분이 가능한데, 동적 바인딩은 실행 시간에 이루어지거나 실행 시간에 변경된다. 정적 바인딩은 실행 시간 전에 일어난다. 실행 시간에는 변하지 않는 상태로 유지된다. 일반 함수 자바스크립트에서 함수는 실행될 때마다 함수 내부에 this라는 객체가 추가된다. 일반 함수에서 this가 바인딩 되는 상황이 3가지가 있는데, 1. 함수 ..
[알고리즘] 2개 이하로 다른 비트
·
알고리즘
문제 설명 양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다. x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수 예를 들어, f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다. 수비트다른 비트의 개수 2 000...0010 3 000...0011 1 f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다. 수비트다른 비트의 개수 7 000...0111 8 000...1000 4 9 000...1001 3 10 000...1010 3 11 000...1011 2 정수들이 담긴 배열 numbers가 매개변수로 주어집니..
[알고리즘] 프렌즈4블록
·
알고리즘
문제 설명 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임이다. 만약 판이 위와 같이 주어질 경우, 라이언이 2×2로 배치된 7개 블록과 콘이 2×2로 배치된 4개 블록이 지워진다. 같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러 개 있다면 한꺼번에 지워진다. 블록이 지워진 후에 위에 있는 블록이 아래로 떨어져 빈 공간을 채우게 된다. 만약 빈 공간을 채운 후에 다시 2×2 형태로 같은 모양의 블록이 모이면 다시 지워지고 떨어지고를 반복하게 된다. 위 초기 배치를 문자로 표시하면 아래와 같..
[알고리즘] 피로도
·
알고리즘
문제 설명 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다. 이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들..