Algorithm 41

[Javascript] 프로그래머스 - 네트워크

목차1. 문제 설명2. 문제 풀이3. 전체 코드1. 문제 설명n 개의 컴퓨터가 있을 때, 네트워크 개수를 계산한다.☁ 네트워크란 컴퓨터가 연결된 형태를 의미한다.if) A - B 와 B - C 가 연결되어 있다면 A - B - C는 하나의 네트워크 안에 있다고 할 수 있다. 입출력 => n 개의 컴퓨터, 그리고 컴퓨터의 연결 정보가 주어질 때, 네트워크의 개수를 리턴한다. 첫번째 예시 두번째 예시2. 문제 풀이각 노드의 연결과 관련된 문제이므로, dfs 로 해결하였다.1) dfs 를 한번 호출했을 때, 연결된 컴퓨터를 모두 방문할 수 있다.2) 연결되지 않은 컴퓨터는 다시 dfs 를 호출해야 한다. 초기화 dfs 함수 dfs 함수를 호출하는 부분 시간복잡도1) 전체 네트워크 탐색 과정 → O(N)2) 한..

Algorithm 2025.02.03

[Javascript] 프로그래머스 - 징검다리

🧾 목차1. 설명2. 알고리즘 접근3. 문제 풀이4. 전체 코드1. 설명1️⃣ 문제 분석출발 지점부터 목적 지점(distance) 사이의 돌 들이 있다.그 돌중에서 n 개의 돌을 삭제하여 각 구간(남은 돌 사이 거리)의 최소 값을 구하고,이 최소값들 중 가장 큰 값(최대 최소 거리)을 구하는 문제이다. 2️⃣ 입출력돌의 개수(rocks.length)가 5일 때, 2개의 돌을 삭제하는 경우의 수는,C(5, 2) = 10총 10가지의 경우의 수가 존재한다. 해결과정1) 2개의 돌을 선택하여 제거(총 10가지 조합 가능)2) 남은 돌들 사이의 거리를 계산3) 각 경우마다 최소 거리값을 구함4) 이 최소값들 중 가장 큰 값을 구하면, 4이다. 3️⃣ 제한사항  완전 탐색의 경우, C(바위 개수, 삭제할 바위 ..

Algorithm 2025.01.30

[Javascript] 프로그래머스 - 퍼즐 게임 챌린지

🧾 목차1. 문제 설명2. 문제 풀이3. 정답 코드4. 총평1. 문제 설명https://school.programmers.co.kr/learn/courses/30/lessons/340212 퍼즐 해결 시 소요 시간 계산 방법예제 조건- 퍼즐 난이도 : 1,5,3- 퍼즐당 기본 시간 : 2,4,7- 나의 레벨 : 1 계산 과정1. 첫 번째 퍼즐 (난이도 1, 시간 2)- 내 레벨(1)과 같으므로, 소요 시간 = 2 2. 두 번째 퍼즐 (난이도 5, 시간 4)- 난이도 (5) > 내 레벨(1)이므로 추가 시간 발생 - 추가 시간 공식  👉 (이전 퍼즐 소요 시간 + 현재 퍼즐 소요 시간 ) x (퍼즐 난이도 - 내 레벨) + 현재 퍼즐 소요 시간 - 적용  (2 + 4) x (5 - 1) + 4 = 6 ..

Algorithm 2025.01.29

[Javascript] 프로그래머스 - 입국심사

🧾 목차1. 문제 설명2. 문제 풀이3. 전체 코드1. 문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있는데, 모든 사람이 심사를 받는데 걸리는 시간의 최소값을 구하는 문제각 심사원이 한 명을 심사하는 데 걸리는 시간은 모두 다르며, times 배열을 통해 주어진다. 입출력6명이 통과해야한다.총 2명의 심사원은 심사를 하는데 각각 [7분, 10]분이 걸린다. 1) 가장 첫 두 사람은 바로 심사를 하러 간다.2) 7분이 되었을 때, 세번 째 사람이 심사를 받는다.3) 10분이 되었을 때, 네번 째 사람이 심사를 받는다.4) 14분이 되었을 때, 다섯번 째 사람이 심사를 받는다.5) 20분이 되었을 때, 심사대가 비지만 거기서 심사를 받지 않고 21분이 되었을 때 심사를 받는다.6) 28분이 되었을..

Algorithm 2025.01.28

[Javascript] 프로그래머스 - 타겟 넘버

🧾 목차1. 문제 설명2. 문제 풀이3. 정답 코드1. 문제 설명n개의 음이 아닌 정수가 있을 경우,1) 이 정수들의 순서를 변경하지 않고 2) 빼거나 더해서 만들 수 있는 수 중에서 타겟 넘버가 될 경우 카운트해라 입출력 제한 사항2  2개의 연산자(+, -)를 사용하여 모든 경우의 수를 구한다면 시간 복잡도는 2^20 ≈ 1,000,000👉 모든 경우의 수를 구해도 됨!2. 문제 풀이2개의 연산자(+, -)를 사용하여 모든 경우의 수를 구해야 하는 문제 => dfs 재귀함수를 구현>1. 모든 숫자를 모두 사용 + 타겟 넘버가 완성된 경우   👉 answer + 1, 종료2. 모든 숫자를 모두 사용 + 미완성  👉 종료 3. 정답 코드function solution(numbers, target)..

Algorithm 2025.01.28

[Javascript] 프로그래머스 - 베스트 앨범

🧾 목차1. 문제 설명2. 문제 풀이3. 정답 코드 1. 문제 설명장르별로 가장 많이 플레이된 노래를 2개씩 묶어 배스트 앨범을 만드는 문제입니다. 💡 이 때, 정렬 기준은 다음과 같습니다.1) 총 플레이 수를 기준으로 장르를 정렬 (e.g. classic 과 pop의 총 플레이 수가 더 많은 게 더 먼저)2)  각 장르당 플레이 수를 기준으로 곡 정렬 (e.g. classic의 곡은 총 3개이고, 그 곡들의 플레이 수를 기준으로 정렬) 입출력 2. 문제 풀이1. 변수 선언가장 고민을 많이 했던 부분이였습니다.1) 총 플레이 수를 기준으로 정렬해야함2) 곡 정보를 가지고 있어야 함 👉 [key: value] 를 [인덱스: 플레이 수]3) 각 장르에서 플레이 수를 기준으로 정렬해야함 이 세가지를 염두..

Algorithm 2025.01.25

[Javascript] 프로그래머스 - 모음 사전

🧾 목차1. 문제 설명2. 문제 풀이3. 정답 코드1. 문제 설명알파벳 모음 ('A', 'E', 'I', 'O', 'U') 만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어 조합 중입력 문자열(word)은 몇 번 째 인덱스인지 리턴하는 문제이다. 입출력  제한 사항만들 수 있는 단어의 최대 길이는 5 이하이다. 👉 조합을 구현할 함수에서, 현재 단어의 길이가 5다. => 즉시 리턴해야함2. 문제 풀이1) 변수 선언index 변수는 조합을 만들어낼 때마다 1씩 증가를 시킬 예정이다. 2) 조합 함수조합 함수를 구현한다. ⭐ Key point이 때, 얼리 리턴 조건은 다음과 같은데,  1) 원하는 알파벳이 나왔을 경우 => 정답  2) 조합한 문자열이 5글자일 경우 => 제한 조건 (1  이 경우를..

Algorithm 2025.01.22

[Javascript] 소수 찾기

🧾 목차1. 문제 설명2. 문제 풀이3. 정답 코드1. 문제 설명나올 수 있는 모든 수의 조합을 구하여, 소수의 개수를 리턴하는 문제이다. 입출력 예제 제한사항- 1 - 중복 가능 (e.g. "011")2. 문제 풀이 가능한 모든 조합을 구하여, 소수인 경우에만 리스트에 넣어주면 된다. 1) 이 때, 만들 수 있는 소수 리스트는 중복을 배제해야한다.e.g. "001", "01" 은 모두 숫자 1로 해석된다는 의미  var primeNumbers = new Set(); // 만들 수 있는 모든 소수 리스트 (중복 x) var len = numbers.length; // 입력 문자열의 길이  2) 소수 판별 함수 구현- 수가 0 또는 1인 경우, 반드시 소수가 아님- 2부터 ~ 제곱근 까지 반복..

Algorithm 2025.01.21

[Javascript] 더 맵게

목차1. 문제 설명2. 문제 풀이3. 전체 코드1. 문제 설명모든 음식의 스코빌 지수를 K 이상으로 만드는 데 걸리는 횟수를 구하는 문제이다.K 이상으로 만들기 위해서, 연산을 해야하는데 그 연산은 다음과 같다.섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Key point제한 조건 : 2 가장 적은 두 개의 값을 계속 구해야하는데, 그때그때마다 새로운 적은 값을 구하기 위해서는 시간초과가 발생한다.👉 힙 알고리즘을 구현해내야한다. 2. 문제 풀이1) 기본 코드힙을 구현하기 위한 기본 구조는 다음과 같다.class MinHeap { constructor() { this.heap = []; // 힙 배열 } ..

Algorithm 2025.01.11

[Javascript] 가장 큰 수

목차1. 문제 설명2. 문제 풀이3. 정답 코드 1. 문제 설명0 또는 양의 정수들을 집합이 주어졌을 때 그 수들을 붙여서 만들수 있는 가장 큰 수를 구하는 문제이다.입출력 예는 다음과 같다. 주의할 점numbers를 내림차순하여 이어붙인 것이 반드시 가장 큰 수는 아니다.만약, 2번째 예시를 내림차순 방식으로 답을 구한다면 → "9534303" 이다.하지만 가장 큰 수는 "9534330" 이므로, 다른 방식을 찾아야했다! 2. 문제 풀이만약 [3, 30] 이 주어진다면, 가장 큰 수는 "330" 이다.내림차순을 결정하는 수는 2개의 수를 더한 수이다. ( ≠ 각 수를 내림차순) (참고) 기본 sort 함수 사용법[1,2,3,4].sort((a, b)=> b - a); a는 뒷번호, b는 앞번호이다. b..

Algorithm 2025.01.11