일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- db
- deque
- CSS
- java
- HTML
- OS
- 영속성 컨텍스트
- Dijkstra
- jpa
- 운영체제
- CS
- 캐싱
- It
- 플로이드-워셜 알고리즘
- 데이터베이스
- 레디스
- BFS
- 완전탐색
- 백준
- javascript
- 자료구조
- redis
- 알고리즘
- 프로그래머스
- nosql
- Algorithm
- 아키텍처
- Data structure
- DFS
- PYTHON
- Today
- Total
목록분류 전체보기 (94)
If at first you don't succeed, try again
코딩테스트 연습 - 더 맵게 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr * 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 ..

* 개요 Deque(덱)은 단뱡향으로만 데이터의 삽입 / 삭제가 가능했던 큐와는 달리 양방향으로 데이터의 삽입 / 삭제가 가능한 자료구조이다. 즉, 스택으로도 쓸 수 있고, 큐로도 쓸 수 있다는 장점이 있다. 리스트 자료형이 있는데, 덱을 많이 사용하는 이유는 리스트보다 덱의 속도가 훨씬 빠르기 때문이다. 리스트는 O(N), 덱은 O(1)의 시간 복잡도를 가진다. * 파이썬으로 구현한 덱 deque 모듈을 활용하여 덱을 구현하였다. from collections import deque queue = [] dq = deque(queue) dq.append(1) # 1 dq.append(2) # 1 2 dq.append(3) # 1 2 3 dq.appendleft(0) # 0 1 2 3 dq.pop() # ..

* 개요 Circular Queue(원형 큐)는 큐의 변형된 구조로서, 데이터를 넣는 부분(rear)과 데이터를 빼는 부분(front)을 포인터로 지정함으로써,enqueue와 dequeue를 하는 형태의 자료구조이다. 원형 큐에서 정해둔 큐의 크기보다 더 큰 경우(큐가 가득 찬 경우), 큐가 비어있을 경우에 포인터가 같은 위치를 지정하기 때문에 이를 해결하기 위해 한 공간을 비워놓는다.(None or Null) * 파이썬으로 구현한 원형 큐 원형 큐를 리스트로 구현하였다. MAX_SIZE = 5 class CircularQueue: def __init__(self): self.front = 0 self.rear = 0 self.queue = [None] * MAX_SIZE def enqueue(self,..

* 개요 Priority Queue(우선순위 큐)는 선입선출 구조를 가지는 일반적인 큐의 자료구조와는 달리, 데이터의 삽입은 순서와 관계가 없지만 삭제할 때는 우선순위가 높은 원소부터 삭제가 되는 자료구조이다. 우선순위 큐의 대표적인 예로 heap이 있다. * Heap(힙) heap(힙)은 여러 개의 값 중에서 가장 크거나 가장 작은 값을 빠르게 찾기 위해 만든 이진 트리이다. 힙의 종류에는 최대 힙과 최소 힙이 있는데, 최대 힙은 root 노드에 가장 큰 값이 들어가게 되며, 최소 힙은 root 노드에 가장 작은 값이 들어가게 된다. 힙의 데이터 삽입 및 삭제의 시간 복잡도는 O(logN)이 소요된다. * 파이썬으로 구현한 우선순위 큐(최소 힙) 우선순위 큐를 위해서 파이썬에 내장되어 있는 heapq ..

* 개요 Queue(큐)는 선입선출(First In First Out)의 자료구조를 뜻한다. 대기열이라고도 한다. 데이터가 들어오는 위치는 가장 뒤(rear 또는 back)에 있고, 데이터가 나가는 위치는 가장 앞(front)이다. 큐를 응용한 형태의 큐로는 원형 큐(Circular Queue), 우선순위 큐(Priority Queue) 등이 있다. 보통 배열을 사용해서 큐를 구현하면, enqueue(rear에 데이터 추가)와 dequeue(front의 데이터 삭제)를 할 때마다 계속 데이터가 앞으로 밀려나는 문제가 생기는데, 이를 해결하기 위해 원형 버퍼(원형 큐)를 사용한다. 원형 큐는 이후 포스트에서 다룰 예정이다. * 파이썬으로 구현한 큐(리스트) 큐를 리스트로 구현하였다. class Queue:..
코딩테스트 연습 - 타겟 넘버 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr * 문제 설명 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버..

* 개요 Stack(스택)은 후입선출(Last In First Out - LIFO) 특성을 가지는 자료구조이다. 즉, 데이터의 삽입과 삭제가 메모리의 한 쪽 끝에서만 나타난다고 할 수 있다. 메모리에 새로 들어오는 데이터(push)의 위치가 메모리의 말단에 위치하고, 이를 '탑 포인터'라고 일컫는다. 내보내는 데이터(pop) 역시 메모리의 말단을 거친다. 스택의 추상 자료형(Abstract Data Type - ADT)을 살펴보면, 입력 연산은 push, 출력 연산은 pop이다. 조회 연산은 peek라고 하는데, 탑 포인터가 가리키는 데이터를 조회만 할 뿐, 인덱스에 변화를 주지는 않는다. 스택은 흔히 크기를 고정해서 사용하기 때문에, 이를 다 사용하면 데이터가 넘치게 된다. 이에 대한 대처방안이 존재하..

* 개요 이번 포스트에서 다룰 내용은 Circular LinkedList(원형 연결리스트)이다. 원형 연결리스트는 단순 연결리스트에서 마지막 노드가 None이 아닌 첫 노드를 참조하는 형태의 자료구조이다. 바로 원형 연결리스트에 대해 알아보도록 하자. * Circular LinkedList(원형 연결 리스트) Circular LinkedList는 리스트가 비어있지 않으면 어떤 노드도 None을 가지고 있지 않기 때문에 프로그램에서 None 조건을 검사하지 않아도 된다는 장점을 지니고 있다. 그러나 이전 노드를 쉽게 참조할 수 있었던 이중 연결리스트와는 달리, 역방향으로 노드를 순회하기 쉽지 않으며, 무한 루프가 발생할 수도 있다는 단점을 가지고 있다. 해당 단점을 보완한 원형 연결 리스트가 존재하긴 한다..
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net * 문제 초기에 {0}, {1}, {2}, ... {n} 이 각각 n+1개의 집합을 이루고 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작성하시오. * 입력 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주..

* 개요 이번 포스트에 다룰 내용은 Doubly LinkedList(이중 연결리스트)이다. 이전 노드를 참조할 수 없어 단방향으로만 노드에 접근이 가능했던 SIngly LinkedList(단순 연결리스트)와 달리 Doubly LinkedList(이중 연결리스트)는 이전 노드 참조가 가능하다. 또한 양방향으로 노드에 접근할 수 있어 삽입/삭제/탐색이 단순 연결리스트에 비해 속도가 더 빠르다는 특징이 있다. * Doubly LinkedList(이중 연결리스트) Doubly LinkedList(이중 연결리스트)는 다음 노드의 참조 뿐만이 아니라 이전 노드의 참조도 같이 가리킬 수 있다. 뒤로 탐색하는게 빠르다는 단순한 장점 외에도 한 가지 장점이 더 있는데, 단순 연결리스트는 현재 가리키고 있는 노드를 삭제하..