끄적끄적 코딩
[Javascript] 프로그래머스 - 섬 연결하기
알고리즘 2025. 3. 25. 21:05

문제 설명n개의 섬 사이에 다리를 건설하는 비용이 주어질 때, 모든 섬이 서로 통행 가능하도록 만드는 최소 비용을 구해야 합니다. 섬들은 직접 연결되지 않아도, 중간 섬을 통해 도달할 수 있으면 통행 가능한 것으로 간주합니다.제한 사항섬의 개수 n은 1 이상 100 이하입니다.costs[i]는 세 개의 정수로 구성되며, 두 섬을 연결하는 데 필요한 비용을 의미합니다.같은 연결은 중복되어 주어지지 않으며, 모든 섬이 연결될 수 있는 입력만 주어집니다.해결 방법알고리즘: 프림 알고리즘 (Prim's Algorithm)프림 알고리즘은 하나의 정점에서 시작해 방문하지 않은 정점 중 가장 비용이 적은 간선을 선택해 최소 신장 트리를 구성하는 방식입니다.우선 각 섬들을 노드로 보고, 주어진 비용 정보를 바탕으로 인..

[Javascript] 프로그래머스 - 베스트앨범
알고리즘 2025. 3. 25. 00:09

문제 설명스트리밍 서비스에서 장르별로 가장 많이 재생된 노래를 모아 베스트 앨범을 제작하려고 합니다.각 노래는 고유 번호를 가지며, 다음 기준에 따라 노래를 선정해야 합니다:장르별 총 재생 수가 높은 순서로 장르를 선정합니다.각 장르 내에서 재생 수가 많은 순서로 최대 두 곡까지 선택합니다.재생 수가 동일할 경우, 고유 번호가 낮은 노래를 우선 선택합니다.장르별로 가장 인기 있는 곡들을 추려내는 것이 핵심입니다.제한 사항genres[i]는 고유 번호 i인 노래의 장르입니다.plays[i]는 고유 번호 i인 노래의 재생 횟수입니다.genres와 plays의 길이는 1 이상 10,000 이하입니다.장르 종류는 100개 미만입니다.한 장르에 노래가 하나뿐이라면 그 곡만 선택합니다.모든 장르는 총 재생 수가 서..

[Javascript] 프로그래머스 - 야근 지수
알고리즘 2025. 3. 21. 18:40

문제 설명하나의 작업은 1시간에 1만큼 처리할 수 있으며, 퇴근까지 남은 시간 N시간 동안 일의 작업량을 분배하여 남은 일의 작업량의 제곱 합(야근 피로도)을 최소화해야 합니다. 작업량이 클수록 야근 피로도에 더 큰 영향을 주기 때문에, 가장 큰 작업량부터 줄이는 방식이 효율적입니다.제한 사항works는 길이 1 이상, 20,000 이하인 배열입니다.works의 원소는 50,000 이하인 자연수입니다.n은 1,000,000 이하인 자연수입니다.해결 방법알고리즘: 우선순위 큐 (Max Heap)가장 많은 작업량부터 줄이기 위해 최대 힙을 사용합니다.모든 작업량을 최대 힙에 삽입합니다.남은 시간이 있는 동안, 가장 큰 작업량을 꺼내 1만큼 줄인 뒤 다시 힙에 삽입합니다.작업량이 0 이하가 되더라도 힙에 삽입..

[Javascript] 프로그래머스 - 택배상자
알고리즘 2025. 3. 9. 19:35

문제 설명컨테이너 벨트에서 주어진 순서대로 택배 상자를 트럭에 실어야 합니다. 하지만 컨테이너 벨트는 한 방향으로만 진행되며, 원하는 순서대로 적재할 수 없는 경우 보조 컨테이너 벨트를 사용해야 합니다. 보조 컨테이너 벨트는 스택(Stack) 구조로, 가장 최근에 보관한 상자부터 꺼낼 수 있습니다. 이를 이용해 최대한 많은 상자를 트럭에 실을 수 있는 개수를 구하는 문제입니다.제한 사항order의 길이는 1 이상 1,000,000 이하입니다.order 배열에는 1부터 order.length까지의 정수가 한 번씩 등장합니다.order[i]는 order[i] 번째 상자를 i+1 번째로 트럭에 실어야 함을 의미합니다.해결 방법알고리즘: 스택을 활용한 그리디 알고리즘컨테이너 벨트에서 상자를 하나씩 확인하며, 현..

[Javascript] 프로그래머스 - 할인 행사
알고리즘 2025. 3. 8. 20:45

문제 설명XYZ 마트에서 회원가입을 하면 10일 동안 매일 한 가지 제품을 할인받을 수 있습니다. 정현이는 자신이 원하는 제품과 수량이 할인되는 날짜와 정확히 10일 동안 일치하는 날을 찾고자 합니다. 주어진 want(원하는 제품), number(각 제품의 수량), discount(할인 일정) 배열을 활용하여, 회원 가입 후 10일 동안 원하는 제품을 모두 할인받을 수 있는 시작 날짜의 개수를 구하는 문제입니다.제한 사항1 ≤ want의 길이 = number의 길이 ≤ 101 ≤ number의 원소 ≤ 10number의 모든 원소 합은 1010 ≤ discount의 길이 ≤ 100,000want와 discount의 원소는 알파벳 소문자로 이루어진 문자열1 ≤ want[i]의 길이, discount[i]의..

[Javascript] 프로그래머스 - 디펜스 게임
알고리즘 2025. 3. 4. 23:58

문제 설명준호는 병사 n명을 가지고 연속되는 적의 공격을 막아야 합니다. 각 라운드에서는 enemy[i]명의 적이 등장하며, 남은 병사 중 해당 수만큼 소모하여 적을 막을 수 있습니다.병사의 수보다 많은 적이 등장하면 게임이 종료됩니다.또한, k번의 무적권을 사용하여 병사를 소모하지 않고 한 라운드의 공격을 막을 수 있습니다.무적권을 적절히 사용하여 최대한 많은 라운드를 막는 것이 목표입니다.제한 사항1 ≤ n ≤ 1,000,000,0001 ≤ k ≤ 500,0001 ≤ enemy의 길이 ≤ 1,000,0001 ≤ enemy[i] ≤ 1,000,000모든 라운드를 막을 수 있다면 enemy.length를 반환해결 방법알고리즘: 우선순위 큐(최대 힙) 활용각 라운드마다 등장하는 적의 수를 sum 변수에 누..

[Javascript] 프로그래머스 - 테이블 해시 함수
알고리즘 2025. 3. 2. 21:46

문제 설명주어진 2차원 리스트(테이블)에서 특정 조건에 따라 정렬한 후, 각 행의 값을 이용해 해시 값을 계산하는 문제입니다.col번째 컬럼을 기준으로 오름차순 정렬합니다.만약 col번째 컬럼의 값이 같다면, 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다.row_begin부터 row_end까지의 각 행에 대해 다음 연산을 수행합니다.각 행의 값을 해당 행의 인덱스로 나눈 나머지를 모두 더한 값을 S_i로 정의합니다.S_i를 모두 XOR 연산하여 최종 해시 값을 구합니다.제한 사항data의 행 개수는 최대 2,500개입니다.각 행의 열 개수는 최대 500개입니다.각 원소의 값은 1 이상 1,000,000 이하입니다.row_begin과 row_end는 유효한 범위 내에서 주어집니다.해결 방법알고리즘: 정..

[Javascript] 프로그래머스 - 유사 칸토어 비트열
알고리즘 2025. 3. 1. 22:51

문제 설명유사 칸토어 비트열은 특정 규칙을 따라 생성되는 문자열입니다.0번째 비트열은 "1"입니다.n번째 비트열은 이전 비트열에서 "1"을 "11011", "0"을 "00000"으로 치환하여 만듭니다.이때, n번째 비트열에서 주어진 구간 [l, r] 내에 존재하는 "1"의 개수를 구하는 문제입니다.제한 사항1 ≤ n ≤ 201 ≤ l, r ≤ 5^nl ≤ r 해결 방법알고리즘: 분할 정복, 재귀유사 칸토어 비트열은 5개의 구간으로 나뉘며, 가운데(3번째) 구간은 항상 "0"으로만 구성됩니다.재귀적으로 n-1 비트열의 정보를 이용하여 l부터 r까지의 "1" 개수를 구합니다.n번째 비트열에서 각 부분이 차지하는 범위를 계산하고,범위가 [l, r]과 겹치지 않으면 탐색하지 않음.완전히 포함되면 사전 계산된 "..

검색 태그