일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로세스
- cors
- 이진탐색
- 타입스크립트
- RxJS
- 알고리즘
- vue3
- 해시테이블
- 코딩테스트
- 프론트엔드
- 자료구조
- 프로그래머스
- 컨테이너
- 자바스크립트
- 브라우저
- 포인터
- 웹팩
- alexnet
- 스택
- Machine Learning
- APOLLO
- 릿코드
- 연결 리스트
- RT scheduling
- 연결리스트
- pytorch
- 배열
- 큐
- C
- GraphQL
- Today
- Total
목록분류 전체보기 (164)
프린세스 다이어리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MfZEv/btriBt5Qyh4/vKR1ycc5GkBFza0JquaWYK/img.png)
나중에 여유가 생기면 다시 푸는 걸로...ㅠ 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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dVophZ/btriCFYNo2H/CskYou2wWVZYXtEO8XsNYk/img.png)
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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/KjOIT/btrhX1BT6Xl/Q63zwVLX2VIIZMJUTokrx0/img.png)
1. 연결 리스트, 큐 구조체 만들기 #include #include #define INF 99999999 typedef struct Node { int data; struct Node *next; } Node; typedef struct Queue { Node *front; Node *rear; int count; } Queue; Queue에는 front, rear, 그리고 큐에 들어가 있는 원소들의 개수를 count로 정했다. 2. push 함수 구현하기 큐는 rear가 가리키는 노드 뒤쪽에 들어가기 때문에, 먼저 노드를 뒤에 만들어 놓고 rear의 next가 그 노드를 가리키게 만든 다음에, rear가 그 노드를 가리키도록 하면 된다. void push(Queue *queue, int data) {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tfLZq/btriA4SeXbv/7sEljLpikoRILAnWql2chk/img.png)
좀 지저분하긴 하나 나름 논리적이라고 생각^^ 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) {..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b4dxOI/btrh2hX9KbS/ujhDIEQGhR4wxLGzWsQBjk/img.png)
1. 큐란 무엇인가 큐(queue)는 뒤쪽으로 들어가서 앞쪽으로 나오는 자료 구조다. 스케줄링, 탐색 알고리즘 등에서 다방면으로 활용된다. 큐는 크게 데이터를 넣는 push, 데이터를 빼내는 pop 함수로 이루어진다. 스택과 마찬가지로 배열을 이용한 구현 방법과 연결 리스트를 이용한 구현 방법으로 나누어진다. push(7) -> push(5) -> push(4) -> pop() -> push(6) -> pop() 2. 큐를 배열로 구현하기 #include #define SIZE 10000 #define INF 99999999 int queue[SIZE]; int front = 0; int rear = 0; void push(int data) { if (rear >= SIZE) { printf("큐 오버플..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HLaGe/btriBAQWwT2/DMbFtxkh2YemrXg8rms9W0/img.png)
function solution(progresses, speeds) { let answer = []; let workDays = progresses.map((work, i) => Math.ceil((100 - work) / speeds[i])) let prodDay = 0; for (let i = 0; i < workDays.length; i++) { if (prodDay < workDays[i]) { answer.push(1); prodDay = workDays[i]; } else { let temp = answer.pop(); answer.push(++temp); } } return answer; } 진도 95 90 99 99 80 99 속도 1 1 1 1 1 1 소요기간(일) 5 10 1 1 20 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LNJsf/btrhWJhFPcP/XIoCN9NkzTVfBueHJwGXQ0/img.png)
1. 페이징 시스템이란 앞서 가상 메모리의 개념에 대한 글에서, CPU는 가상 메모리 주소만을 참조하고 필요할 때만 물리 메모리 주소를 참조한다고 정리했다. 그러면 어떤 단위로 물리 메모리를 활용하는지 궁금증이 생긴다. 왜냐하면 물리 메모리를 한 번에 4GB를 써 버리면 필요한 때만 물리 메모리를 쓴다는 의미가 없기 때문이다. 이 고민은 페이징 시스템(Paging System)으로 해결을 한다. 가상 메모리의 메커니즘은 다양한데, 페이징 시스템이 그중 가장 메이저 한 방식이라고 한다. 페이징 시스템은 물리 메모리에 크기가 동일한 사이즈로 페이지 단위를 만들어 올리는 방법이다. 리눅스 운영체제에서는 4KB 단위로 페이징을 한다. 이 의미는 물리 메모리인 0~4GB를 4KB 단위로 모두 주소를 쪼개서 페이지..