본문 바로가기

알고리즘119

[프로그래머스] 숫자 변환하기 https://school.programmers.co.kr/learn/courses/30/lessons/154538# 문제요점 세 연산의 모든 조합 숫자가 y초과하면 더이상 연산할 필요없다 첫번째 풀이 bfs (성공) 최소 연산 횟수 => bfs 를 생각했다. y가 x로 변환하는 방법 x미만의 결과가 나오는 연산은 고려할 필요없다 최소연산 횟수 만에 찾기위해 num /3, num/2, num-n 순으로 찾았다. function solution(x, y, n) { const queue = [{num: y, count: 0}]; while(queue.length) { const {num, count} = queue.shift(); // shift는 O(n); // x가 되는 연산을 찾음 if (num ===.. 2023. 12. 6.
[프로그래머스] 코딩테스트 공부 https://school.programmers.co.kr/learn/courses/30/lessons/118668 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 당신은 코딩 테스트를 준비하기 위해 공부하려고 합니다. 코딩 테스트 문제를 풀기 위해서는 알고리즘에 대한 지식과 코드를 구현하는 능력이 필요합니다. 알고리즘에 대한 지식은 알고력, 코드를 구현하는 능력은 코딩력이라고 표현합니다. 알고력과 코딩력은 0 이상의 정수로 표현됩니다. 문제를 풀기 위해서는 문제가 요구하는 일정 이상의 알고력과 코딩력이 필요합니다. 예를 들어, 당신의 현재 알고력이 15, 코딩력이 10이라고 가정해보겠습니다. A라는 문제가 알고력 10, 코딩력 10을 요구한다면 A 문제를 풀 수 있습니다... 2023. 11. 25.
우선순위 큐, 힙 우선순위 큐에 대하여 알아보고 힙 자료구조를 통하여 JS 코드로 어떻게 짜는지에 대하여 알아보자. 🧲 우선순위 큐란? 일반 FIFO인 큐와 다르게 우선순위가 높은 노드 먼저 나갈 수 있다. 최솟값이나 최댓값을 빠르게 찾아내기 위해 완전 이진 트리를 사용한다 🧲 구현 배열 및 연결리스트로 구현 간단히 구현이 가능한 장점이 있지만 데이터를 삭제 및 삽입해야할 경우 모든 인덱스를 탐색하는 과정이 있기 때문에 시간복잡도가 O(N)이 되므로 상대적으로 성능이 부족하다 힙으로 구현 구현이 어렵지만 enqueue, dequeue 시간 복잡도가 O(logN)이다 단순히 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 힙 정렬과 동일하며 이 경우엔 O(NlogN)이다. 🧲 구현 방법에 따른 시간 복잡도 🧲 힙이란 O(.. 2023. 11. 22.
[카카오 2022] 등산코스 정하기 https://school.programmers.co.kr/learn/courses/30/lessons/118669 XX산은 n개의 지점으로 이루어져 있습니다. 각 지점은 1부터 n까지 번호가 붙어있으며, 출입구, 쉼터, 혹은 산봉우리입니다. 각 지점은 양방향 통행이 가능한 등산로로 연결되어 있으며, 서로 다른 지점을 이동할 때 이 등산로를 이용해야 합니다. 이때, 등산로별로 이동하는데 일정 시간이 소요됩니다. 등산코스는 방문할 지점 번호들을 순서대로 나열하여 표현할 수 있습니다. 예를 들어 1-2-3-2-1 으로 표현하는 등산코스는 1번지점에서 출발하여 2번, 3번, 2번, 1번 지점을 순서대로 방문한다는 뜻입니다. 등산코스를 따라 이동하는 중 쉼터 혹은 산봉우리를 방문할 때마다 휴식을 취할 수 있으며.. 2023. 11. 18.
[레벨2] n^2 배열 자르기 문제링크 첫번째 풀이 (성공) index의 값 = 항과 열의 최대값 + 1이다 0 1 2 0 1 2 3 1 2 2 3 2 3 3 3 0 1 2 3 0 1 2 3 4 1 2 2 3 4 2 3 3 3 4 3 4 4 4 4 function solution(n, left, right) { var answer = []; for (let index = left; index 2023. 11. 3.
[프로그래머스 LV2] 연속 부분 수열 합의 개수 JS 문제링크 문제 요점 원형수열 안 연속부분의 합으로 만들수 있는 수가 몇가지? 첫번째 풀이(성공) 원형수열이므로 사이클이 생긴다. elements길이 ≤ 1,000이니까 elements를 덧붙여서 cycle배열을 만들 수 있다. 첫번째 갯수별로 순회한다 (선택한 숫자가 1개일 때, 2개일때......n개 일때) 두번째 시작인덱스로 순회한다 (시작인덱스가 0, 시작인덱스가 1.... 시작 인덱스가 n) 이 둘을 합치면 "선택한 숫자가 1개일때 시작인덱스가 0", "선택한 숫자가 1개일때 시작인덱스가 1"... 이런식으로 선택이 되는데 선택된 수의 합sum을 set에 추가한다. set의 size반환 function solution(elements) { const set = new Set(); const cyc.. 2023. 11. 3.