Developing Myself Everyday
article thumbnail
PriorityQueue & Heap

PriorityQueue 우리는 이전에 Queue의 구조에 대하여 학습한적이 있다. Queue는 First In First Out 구조로 먼저 집어넣은 데이터가 먼저 나오는 구조를 가지고 있다. 하지만 PriorityQueue는 이름에서 알 수 있듯이 Queue의 구조에서 데이터의 우선순위에 따라서 우선순위가 높은 데이터가 먼저 나오는 구조를 가지고 있다. 위의 구조는 PriorityQueue의 구조이다. 데이터를 무작위로 Enqueue 했을때 그 순서와 상관없이 우선순위가 높은 데이터가 가장 왼쪽에 위치하는 것을 알 수 있다. 구현 PriorityQueue의 구현은 Array, LinkedList, Heap으로 가능하다. 다만 Array와 LinkedList는 매번 가장 높은 우선순위의 데이터를 가장 ..

article thumbnail
ArrayList & LinkedList

이번에는 ArrayList와 LinkedList에 대해서 알아보도록 하겠다. 이름만 봐도 알 수 있듯 2개의 자료구조는 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체이다. 하지만 동작하는 기능은 서로 다르기 때문에 하나하나 알아보고자 한다. ArrayList ArrayList는 중복을 허용하고 순서를 가지며 인덱스로 원소들을 관리한다. 이 말을 들으면 우리는 바로 ArrayList는 Array와 매우 유사한 기능을 가지고 있다고 생각할 수 있다. ArrayLIst란 이름에서도 알 수 있듯이 Array의 이런 점, List의 데이터가 저장될 때 필요에 의해 자동으로 늘어나며 순서를 가지는 점을 가지고 있다. Array와 가장 큰 차이점은 Array는 처음에 크기를 지정하면 그..

Brute Force (완전탐색)

브루트 포스(Brute Force) 알고리즘이란? 우리가 완전탐색이라고도 부르는 브루트 포스 알고리즘은 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 엄청난 시간이 걸리는 데다 자원이 엄청나게 들어 무식한 방법이라고 할 수 있지만 100%로 완전 탐색할 수 있다는 장점이 있다. 이론적으로 가능한 모든 경우의 수를 다 검색하보는 것이라 암호학에서는 가장 확실한 방법으로 통용되고 있다. 브루트 포스는 크게 선형 구조와 비선형 구조로 나눌 수 있다. 선형 구조: 순차 탐색 비선형 구조: 백트래킹, DFS, BFS 우리는 이런 구조를 가지고 많은 알고리즘 문제를 해결해야 한다. 그러므로 우리는 이런 구조에 대한 이해를 확실하게 해서 해당하는 알고리즘 문제에 가장 알맞은 구조를..

article thumbnail
DFS와 BFS with 백준 1260번: DFS와 BFS

1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개..

article thumbnail
운영체제(2) - 프로세스와 스레드

프로세스 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 우리가 작업 관리자에 들어가 보았을 때 보이는 것들이 바로 프로세스라고 할 수 있다. 위의 사진에서 알 수 있는 것은 프로세스가 앱과 background 프로세스로 나누어져 있다는 것이다. 앱은 다른 말로 foreground 프로세스라고 할 수 있다. 하나의 프로세스에 할당되는 총 메모리 공간을 크게 커널 영역과 사용자 영역으로 나눌 수 있다. 커널 영역에서는 많은 프로세스가 CPU를 필요로 할 때 자원을 배분하는 PCB(Process Control Block, 프로세스 제어 블록)가 생성된다. 사용자 영역에는 프로그램이 동작하기 위한 각각 독립된 4가지의 메모리 영역을 가진다. (Code, Data, Stack, Heap..

SOLID 와 소프트웨어 디자인 패턴

SOLID (객체지향 설계 원칙) SOLID 원칙은 다음과 같은 다섯 가지 원칙의 앞글자를 따서 이름이 지어졌다. Single Responsibility Principle (SRP) - 단일 책임 원칙 Open-Closed Principle (OCP) - 개방-폐쇄 원칙 Liskov Substitution Principle (LSP) - 리스코프 치환 원칙 Interface Segregation Principle (ISP) - 인터페이스 분리 원칙 Dependency Inversion Principle (DIP) - 의존 역전 원칙 이 원칙들은 객체지향 설계를 할 때, 좀 더 유연하고 유지보수하기 쉬운 코드를 작성하기 위해 고안된 원칙들이다. 각각의 원칙은 아래와 같이 설명된다. 단일 책임 원칙(SRP)..

article thumbnail
운영체제(1) - 시작하기

운영체제는 응용 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램이다. 운영체제는 하드웨어와 응용 프로그램 사이에서 다른 응용 프로그램들이 유용한 작업을 할 수 있도록 환경을 제공한다. 다르게 표현하자면, 하드웨어를 감추고 겉으로 다른 프로그램들을 지원해준다고 생각할 수 있다. 이는 프로그램을 사용하는 사람이 편하게 쓸 수 있게 각종 기반 작업을 지원한다는 것으로 이해할 수 있다. 운영체제를 공부해야 하는 이유 사실 이 질문에 대한 대답은 한번이라도 오류 메시지를 접해 보았다면 쉽게 답할 수 있다. 대다수의 오류 메시지들이 운영체제로부터 발생한다. 우리가 작성한 코드가 하드웨어에서 실행되지 못한다면 운영체제는 오류 메시지를 띄워주게 된다. 프로그래밍 문법만 배워서는 해결할 ..

article thumbnail
컴퓨터 구조(3) - 메모리

주기억장치의 종류에는 크게 RAM과 ROM으로 나뉜다. 하지만 우리가 메모리를 말할때는 RAM을 말하는 경우가 많다. RAM (Random Access Memory) RAM은 '임의 접근' 을 할 수 있는 메모리를 말하며 휘발성 저장 장치이다. 비휘발성 저장 장치로는 SSD, CD, USB가 있다. 우리가 컴퓨터를 구매할때 CPU와 GPU를 주로 고려하는데, 그에 몾지않게 RAM의 용량 또한 중요하다. CPU가 실행하고 싶은 프로그램을 RAM으로 가져오게 되는데 이때 RAM의 용량이 적다면 실행 시간이 길어지게 된다. 여러가지 프로그램을 동시에 가져올때도 마찬가지이다. RAM이 클수록 용량이 큰 프로그램을 버벅이지 않게 사용할 수 있다. RAM의 종류 1. DRAM (Dynamic RAM) - 동적 램으..