자바스크립트(60)
-
[JS] 프로그래머스 - 베스트 앨범
문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한 사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인 노래가 재생된 횟수입..
2020.10.08 -
[JS] 프로그래머스 - 여행 경로
문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 ICN 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해 주세요. 제한 사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력 예 tickets return [["ICN"..
2020.10.07 -
[JS] 프로그래머스 - 입국심사
문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다. 입국심사를 기다리는 사람 수 n, 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 times가 매개변수로 주어질 때, 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제한 사항 입국심..
2020.10.04 -
[JS] 피셔 예이츠 셔플(Fisher–Yates Shuffle) 알고리즘
1. 셔플 알고리즘(shuffle) 본론으로 돌아와서, 자바스크립트에서는 랜덤 정렬을 두 가지 방법을 이용해서 구현할 수 있는데, 첫 번째는 sort() 메서드를 이용하는 방법이고, 두 번째는 피셔 예이츠 셔플(Fisher-Yates Suffle) 알고리즘을 이용하는 방법이다. 2. Sort() 를 이용하는 방법 sort() 메서드는 음수 값을 리턴하면 내림차순으로 정렬되고, 양수 값을 리턴하면 오름차순으로 정렬된다. 그래서 이를 랜덤으로 정렬시키기 위해서는 양수 또는 음수 값이 나오는 선택지를 줘야한다. const arr = [1, 2, 3, 4, 5]; arr.sort(() => Math.random() - 0.5); 위 예제를 보면 Math.random()은 곱한 값이 없으므로 0.xxxxxxxx의..
2020.08.05 -
[JS 33가지] 7. Expression vs Statement
1. Expression 자바스크립트에서 표현식(Expression)은 값을 리턴하는 것을 말한다. 다음 코드를 보면 알 수 있다. const add = function(a, b){ return a + b; } const result = add(1,3); // add(1,3)은 값을 리턴하므로 add(1,3)은 표현식이다. console.log(2+2); // 2 + 2 => 값 리턴 => 표현식 console.log(Math.random() + 10); // 값 리턴 -=> 표현식 2. Statement 자바스크립트에서 Statement는 명령, 지시를 말한다. 위 예제를 그대로 가져와보면, const add = function(a, b){ return a + b; } const result = add..
2020.07.07 -
[JS] 플로이드 와샬 알고리즘
1. 플로이드 와샬 알고리즘 지난 번에 포스팅했던 다익스트라 알고리즘은 하나의 정점을 출발점으로해서 모든 정점까지의 최단 경로를 구하는 알고리즘이다. 그런데 이번에 포스팅할 플로이드 와샬 알고리즘은 모든 각각의 정점을 출발점으로해서 모든 정점까지의 최단경로를 구하는 알고리즘이다. 하나의 정점을 출발하는 것이 아니라, 그래프에 있는 모든 각각의 경로에 대한 최단경로를 구하기 때문에 시간복잡도는 O(N³)이다. 또한 플로이드 와샬 알고리즘은 거쳐가는 정점을 기준으로 알고리즘을 수행한다. 이게 무슨 말인지 감이 안오더라도, 지금부터 하는 설명을 들으면 어떤 순서로 알고리즘이 수행되는지 알 수 있을 것이다. [그림 1]은 그래프의 각 정점에 대한 가중치를 순차자료구조로 변환한 것이다. 먼저 출발 정점을 A로 설..
2020.07.06