전체 글 69

[Javascript] 가장 먼 노드

목차1. 문제 풀이2. 정답 코드 (shift 연산 x)3. 시간 복잡도 1. 문제 풀이1번 노드에서 가장 멀리 떨어진 노드의 개수를 구하는 방법- bfs 코드를 순회한다.- visited 배열에 깊이(현재 노드까지의 간선의 개수)를 저장한다.2. 정답 코드 (shift 연산 x)shift() 연산을 O(1)로 만들기 위해 front 변수를 사용한다. - 큐에서 노드 하나를 제거하기 위해(1) q[front] 에서 노드를 꺼냄(2) front++이 두개의 연산(1 + 2)을 합쳐서👉 var cur = q[front++] - 언제까지 반복하는지👉 while(front function solution(n, edge) { var answer = 0; var edges = Array.from({l..

Algorithm 2025.02.13

[Javascript] 프로그래머스 - 게임 맵 최단거리

목차1. 문제 풀이2. 내가 푼 정답 (shift 연산 사용)3. 개선한 풀이 (큐 직접 구현)1. 문제 풀이2차원 평면에서 출발지점과 목적지점이 주어질 때, 장애물(0)을 이동하는 데 걸리는 최단 거리를 구하는 문제이므로, bfs로 해결할 수 있었다.다만, 시간 복잡도를 줄이는 데에서 애를 먹었다. 시간 복잡도제한 조건에서 알다시피 maps의 row, col은 최대 100이다. 따라서 row, col을 둘 다 N 이라고 하겠다.이 때, 시간 복잡도는 다음과 같다.시간 복잡도- 모든 칸을 순회 : O(N^2)- shift 연산 : O(N^2)👉 O(N^4) 최악의 경우 N 👉 O(10^8) 여기서 문제였던 부분이 1초당 10^8 연산을 할 수 있는데, 그럼 간당간당하게 되거나 안되거나 하겠다. 라는 ..

Algorithm 2025.02.05

[Javascript] 프로그래머스 - 아이템 줍기

목차1. 문제 풀이  1) 테두리 구하기  2) 테두리 이동할 때, 풀이법 (❌ 주의: 칸 이동과 다름)2. 전체 코드3. 느낀 점1. 문제 풀이그림과 같이 여러 다각형이 배열 형태로 주어질 때, 테두리 정보를 배열에 저장해두어야 한다.출발지 (x, y) 에서 목적지 (x, y) 에 도달할 때까지 걸리는 가장 짧은 거리를 계산하기 위해서는 bfs 코드를 수행한다. 직사각형 입력 형식직사각형 배열은 [fromX, fromY, toX, toY] 로 주어지며, 각각 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점 정보이다.예를 들어, 가장 아래의 직사각형은 [1,1,7,4] 로 주어진다. 처음 생각한 방식처음에 생각한 방식은 직사각형이 주어질 때, 모든 선분을 1로 만드는 것이였다.그리고 1과 0(초기화) 경계에 있는 ..

Algorithm 2025.02.05

[Javascript] 프로그래머스 - 전력망을 둘로 나누기

🧾 목차1. 문제 설명2. 문제 풀이3. 전체 코드 (dfs)4. 다른 풀이 (bfs)1. 문제 설명n개의 송전탑이 트리 형태로 연결되어 있음.주어진 전선들 중 하나를 끊어서 트리를 두 개의 전력망으로 분할해야 함.두 전력망의 송전탑 개수 차이(절대값)를 최소화하는 경우를 찾아야 함.이 최소 차이를 return 하는 함수를 구현해야 함.2. 문제 풀이트리에서 한 곳의 연결을 끊으면 2개로 나눠진다.만약 [a, b] 를 끊었다면 a, b 노드는 각각 다른 트리에 속한다.따라서 a에서 시작하는 dfs 순회를 돌려서 트리에 속한 노드 개수를 구하고, 2n 에서 개수를 빼서 절댓값을 구하면 된다. 1️⃣ 연결 초기화 2️⃣ dfs 함수[a, b] 연결을 끊어서 a 부터 dfs를 돌린다면 exceptV는 b로 ..

Algorithm 2025.02.04

[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
728x90