일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 연결 리스트
- RxJS
- 알고리즘
- 배열
- 타입스크립트
- GraphQL
- APOLLO
- 프로그래머스
- Machine Learning
- alexnet
- 브라우저
- vue3
- 코딩테스트
- 릿코드
- cors
- 포인터
- 스택
- 자바스크립트
- RT scheduling
- pytorch
- C
- 이진탐색
- 해시테이블
- 자료구조
- 연결리스트
- 웹팩
- 프론트엔드
- 프로세스
- 컨테이너
- 큐
- Today
- Total
목록알고리즘 (26)
프린세스 다이어리
1. 퀵 정렬이란 퀵 정렬이란 피벗을 기준으로 큰 값과 작은 값을 서로 교체하는 정렬 기법이다. 값을 서로 교체하는 데에 N번, 엇갈린 경우 교체 이후에 원소가 반으로 나누어지므로 전체 원소를 나누는 데에 평균적으로 logN번이 소요되므로, 평균적으로 0(NlogN)의 시간 복잡도를 가진다. 퀵 정렬은 편향된 분할이 발생할 때 연산의 양이 최악의 경우 O(N2) 이다. 따라서 실제로 정렬할 때는 퀵 정렬을 굳이 직접 구현하지는 않는다. C++에 Algorithm 라이브러리에 포함된 sort() 함수는 퀵 정렬을 기반으로 하면서 O(NlogN)을 보장한다. 피벗 값이 가장 왼쪽이라고 가정한다. 5 4 3 8 9 6 7 1 10 2 (1) 5의 왼쪽부터 시작해서 5보다 큰 값을 찾는다. 또 오른쪽부터 시작해..
> 문제 바로가기 코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr 1. 접근 방법 - [["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] 이런 그래프고 각 노드의 [0]이 출발, [1]이 도착임 - 문제에서 항상 ICN 공항에서 출발한다고 했으므로 출발지는 'ICN' - 주어진 tickets(array), 시작노드 'ICN'(string), 탐색중인 경로 path(array), 결과 담을 routes(array) (1) 만약 tickets가..
문제 nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요. 예시 nums = [1,1,1,2,2,3], k = 2 return [1,2] nums = [1], k = 1 return [1] 접근방향 문제에 최대 nums의 길이나 k의 범위가 제시되어 있지 않아 key를 이용해 상수 시간 복잡도로 접근할 수 있도록 object을 활용하여 풀었다. 마지막에 Object.keys를 활용하여 정렬을 할 때, string 자료형으로 배열에 들어가기 때문에 map함수로 number 형으로 바꿔주는 것에 유의한다. 해답 function topK(nums, k) { let obj = {}; for (let i = 0; i < nums.length; i++) { if (num..
> 문제 바로가기 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 백준 맞왜틀 극한이다. 4시간 붙들고 있었음 1. 접근 방향 (1) 집이 표시된 그래프와, 내가 확인했음을 기록한 그래프가 필요하다. 초기화시켜준다. let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split('\n'); const n = +input.shift(); // 집이 있는지 기록된 그래프 input = input.map((arr) => arr.tr..
> 문제 바로가기 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 1. 접근 방법 (1) 입력받은 n, m, graph 잘라서 준비해두기 let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split('\n'); const [n, m] = input.shift().split(" "); let graph = input.map(arr => arr.split("").map(x => +x)); (2) n, m, graph 인자로 받는 BFS 함수 만들기 (3) 현..
> 문제 바로가기 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 1. 접근 방법 (1) 내림차순으로 정렬한다. let arr = citations.sort((a, b) => b - a); (2) 정렬한 배열을 반복문을 돌면서 각 논문의 인용 수와 인덱스(논문 수)를 비교한다. 논문의 인용 수가 논문 수보다 크면 논문 수를 1씩 더하고, 같으면 그 논문 수를 리턴한다. for (let i = 0; i i) { answ..
정렬된 배열이 있다면, 원하는 타깃 원소 또는 타깃 원소의 인덱스는 이진 탐색으로 찾는 게 시간 복잡도 최악 기준 O(logN)으로 제일 효율성이 좋다. 이진 탐색의 원리는 배열의 가운데 원소를 고르는 것부터 설명된다. const mid = Math.floor((첫 인덱스 + 마지막 인덱스) / 2); 첫 인덱스와 마지막 인덱스는 반복문을 통해 계속 바뀌므로 let으로 선언해준다. let left = 0; let right = arr.length - 1; 만약 원하는 타깃 원소가 가운데 원소랑 일치한다면 그 원소의 인덱스를 리턴해준다. if (array[mid] === target) { return mid; } 그렇지 않은 경우, 선택했던 가운데 원소가 타깃 원소보다 큰 경우와 작은 경우를 나눠 인덱스 ..
퀵 정렬은 정렬 알고리즘이다. 선택 정렬보다 훨씬 빠르고 실제로도 많이 사용된다. C언어 표준 라이브러리에는 qsort라는 함수가 있는데 이것이 바로 퀵 정렬을 구현한 함수다. 퀵 정렬은 분할 정복 전략 중에 하나다. 배열을 정렬할 때 가장 간단하고 연산이 적은 배열은 무엇일까? 바로 정렬할 필요도 없는 배열이다. [] (비어 있는 배열) [5] (원소가 하나인 배열) 비어 있는 배열이나 원소가 하나인 배열이 기본 단계가 된다. 이 경우, 배열을 있는 그대로 반환하면 된다. function quickSort(arr) { if (arr.length