
- 큐(Queue)도 Stack과 같이 단순한 규칙을 가지고 있는 리스트이다. - 규칙 : FIFO(First In First Out) - 즉, 먼저 들어간 데이터가 가장 먼저 나온다는 의미로서 먼저 들어간게 가장 나중에 나오는 Stack과는 반대의 개념이다. - Queue는 운영체제에서도 사용된다. - 운영체제가 프로세스의 작업 요청을 들어온 순서대로 Queue에 넣고 이를 CPU가 순서대로 꺼내서 처리한다. - 이를 운영체제에서는 FIFO 스케줄링이라고 한다. - 일상생활에서 마트 계산대, 놀이공원 줄 등도 모두 Queue의 개념으로 볼 수 있다. ● 연결리스트로 Queue 구현하기 - 연결리스트의 맨 첫 번째 node를 head 라고 했을 때 숫자 1, 2, 3, 4 를 순서대로 연결리스트에 삽입하..

● Stack이란? - Stack은 단순한 규칙을 가지고 있는 리스트이다. 여기서 규칙은 FILO(First In Last Out)이다. - FILO(First In Last Out) : 먼저 들어간 데이터가 나중에 나오는 규칙 ex) 10명의 사람이 모두 1층에서 엘베를 탄 후 5층에서 내린다고 했을 때 가장 먼저 탄 사람이 가장 나중에 내린다. - Stack은 먼저 들어온 게 나중에 나오는 조건만 충족한다면 어떠한 자료구조로 구현하든 상관없다. - 배열과 연결리스트를 이용해서도 각각 Stack을 구현할 수 있다. ● 연결리스트를 이용해 Stack 구현 - 연결리스트의 맨 첫 번째 node를 head 라고 했을 때 이 haed를 가지고 모든 node를 연결할 수 있다.(아래 사진 참고) - 바로 이 h..

● 연결리스트(Linked List) - 이전 글에서 작성한 배열의 단점을 어떻게 극복할 수 있을까? - 똑똑한 사람들이 아래와 같이 생각했다. - 배열이 연속된 메모리 공간을 할당하는 것이 문제이니까 저장하려는 데이터들을 메모리 공간에 '분산'해서 할당하면 되지 않을까? 그리고 이렇게 분산된 데이터들을 서로 '연결'해주면 되지 않을까? - 이러한 분산 및 연결은 노드(Node)가 있기에 가능하다. - 노드의 구조는 (1). 데이터를 담는 변수 하나와 (2). 다음 노드를 가리키는 변수 하나를 가지고 있다. - 데이터가 필요한 만큼 노드를 만들어 저장하고 다른 노드를 가리켜서 서로 연결해주면 된다. - 이러한 모습 때문에 Linked List(연결 리스트) 라고 부르는 것이다. - 위 그림에서 볼 수 있..

- 배열은 프로그래밍 언어에서 기본적으로 제공하는 자료구조이다. - 글을 읽기에 앞서 일반적인 프로그래밍 언어에서의 전형적인 배열과 JS의 배열은 차이점이 있다는 것을 알아두자 1. 프로그래밍 언어에서의 전형적인 배열 - 일반적으로 프로그래밍 언어에서 배열을 선언할 때는 아래와 같이 선언과 동시에 배열의 크기를 알려준다. int arr[10] = {1, 2, 3, 4, 5}; - 위와 같이 선언한 배열은 메모리에서 아래와 같은 모습을 하고 있다 - 운영체제가 메모리에서 숫자 10개가 들어갈 수 있는 연속된 빈 공간을 찾아 순서대로 1, 2, 3, 4, 5 를 할당한다. - 10개 중 할당되지 않은 부분에는 의미 없는 더미 데이터가 저장된다. - 운영체제는 배열의 시작 주소(= 숫자 1이 들어간 주소)만 ..

- 자료구조와 알고리즘을 구현하는데 필요한 환경을 만들어보자 - JS, VScode, NodeJS가 필요하다. - JS, VScode는 따로 준비할 필요가 없고(이미 있으니) Node.js만 다운받을 것이다. - Node.js는 JS를 실행시키는 JS 엔진이라고 생각하면 된다. - PowerShell을 킨 후 node 라고 입력, 아래 사진처럼 되면 설치 완료 - 폴더를 원하는 곳에 만든 후 VSCode에서 해당 폴더를 열어보자 - 그 후 test.mjs 파일을 만들자. 여기서 확장자인 .mjs는 Javascript 모듈 파일을 의미한다. - 특정 자료구조가 다른 자료구조를 만드는데 사용되기도 하기 때문에 재사용을 위해 모듈로 만드는 것이다. - 테스트 코드를 작성한 후 Node.js로 실행시켜 보기전에..

- 이전 글에서 자료구조에 따라 알고리즘이 달라지며 동일한 자료구조일지라도 구현할 수 있는 알고리즘은 천차만별이라는 것을 배웠다. - 떠오르는 수 많은 알고리즘 중 가장 정확하고 효율적인 최선의 알고리즘을 구현하는 것이 중요하다. - 그렇다면 좋은 알고리즘이라는 것은 무엇일까? - 이는 주어지는 요구사항에 따라 달라진다. - 누군가는 메모리 사용량의 최적화를 지향하는 알고리즘을 원할수도 있고 또 누군가는 메모리 사용량은 상관 없이 빠른 속도를 원할 수도 있다. - 하지만 일반적으로는 알고리즘의 '속도'를 성능의 척도로 여긴다. 이를 시간복잡도라고 한다. ※ 시간복잡도 : 특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간 - 문제는 이러한 시간을 측정하는 것이 사실상 불가능한데 그 이유는 사용자의 컴퓨..
- Total
- Today
- Yesterday
- OS
- 빅데이터 분석기사
- Java8
- 알고리즘
- SpringBoot
- git
- 메모리
- nosql
- MySQL
- node.js
- db
- 빅데이터
- 프로그래머스
- DART
- MongoDB
- Stream
- 운영체제
- Spring Boot
- API
- 프로세스
- 코테
- 코딩테스트
- 자료구조
- Phaser3
- Advanced Stream
- jpa
- SQL
- Phaser
- spring
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |