일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cors
- 프론트엔드
- 릿코드
- APOLLO
- 타입스크립트
- 자료구조
- 해시테이블
- RxJS
- 자바스크립트
- 이진탐색
- pytorch
- GraphQL
- 프로그래머스
- vue3
- alexnet
- 코딩테스트
- 연결 리스트
- 연결리스트
- 컨테이너
- 프로세스
- 스택
- 큐
- 포인터
- RT scheduling
- Machine Learning
- 배열
- 웹팩
- C
- 브라우저
- 알고리즘
- Today
- Total
목록자료구조, 알고리즘 (48)
프린세스 다이어리

> 문제 바로가기 코딩테스트 연습 - 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..

> 문제 바로가기 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 1. 접근 방법 (1) 조건을 충족하는 방식으로 compare하는 함수를 만든다. const isLeftBiggerThanRight = (left, right) => { if ((String(left) + String(right)) >= (String(right) + String(left))) { return true; } else { return false; } } (2) 퀵 정..

정렬된 배열이 있다면, 원하는 타깃 원소 또는 타깃 원소의 인덱스는 이진 탐색으로 찾는 게 시간 복잡도 최악 기준 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

나중에 여유가 생기면 다시 푸는 걸로...ㅠ 1. Node, Stack, push, pop, getTop 정의해주기 #include #include #include #define INF 99999999; typedef struct Node { int data; struct Node *next; } Node; typedef struct Stack { Node *top; int count; } Stack; void push(Stack *stack, int data) { Node *node = (Node*) malloc(sizeof(Node)); node -> data = data; node -> next = stack -> top; stack -> top = node; stack -> count++; } i..

1. 배열로 접근하는 방법 전체 풀이 function solution(bridge_length, weight, truck_weights) { // queue 초기화 let queue = new Array(bridge_length).fill(0); let seconds = 0; while (queue.length) { // queue 하나씩 실행 queue.shift(); seconds++; let queueSum = queue.reduce((acc,cur) => acc + cur, 0); if (truck_weights.length) { if (queueSum + truck_weights[0] queue에 push(); let temp = truck_weights.shift(); queue.push(te..
자바스크립트로도 연결 리스트를 구현할 수 있다. C언어랑 거의 비슷한데 C에서 구조체로 Node를 만들어줬던 것처럼 자바스크립트에서는 클래스로 Node의 구성을 만들어줄 수 있다. 연결 리스트의 기본 클래스 구조와, 원소를 추가하고, 삭제하는 방법을 정리해보았다. 참고: C언어로 구현하기 1. 연결 리스트와 노드의 기본 구조 class Node { constructor(data) { this.next = null; this.data = data; } } 단방향 연결 리스트의 경우 뒤 노드의 값을 가리키는 next, 그리고 자신이 가지는 값인 data로 구성된 Node가 줄줄이 연결된 형태를 띠고 있다. 양방향 Node 구조체는 여기에서 자신의 앞 노드를 가리키는 this.prev가 추가된다. class ..

좀 지저분하긴 하나 나름 논리적이라고 생각^^ function solution(priorities, location) { let nodes = priorities.map((num, idx) => { return { priority: num, id: idx } }); let queue = []; // queue에 하나씩 집어넣는 로직 while (nodes.length !== 0) { let highest = 0; for (let i = 0; i highest) { highest = nodes[i].priority; } } let temp = nodes.shift(); if (temp.priority < highest) {..