본문 바로가기

CS110

[자료구조] HashMap(해쉬맵) - Java Collections Framework HashMap(해쉬맵) HashMap이란 Map인터페이스 중 하나로써, key와 Value값으로 묶어 데이터를 저장하는 자료구조이다. Hashing을 사용하므로써 많은양의 데이터를 검색하는데 뛰어난 성능을 가지고 있다. java Collections Framework에서 해쉬맵의 자세한 사용법은 아래 코드를 참조하자 package algorithm; import java.util.*; public class hashmap { public static void main(String[] args) { HashMap map = new HashMap(); // 데이터 삽입 map.put("apple", 2018); map.put("banana", 2011); map.put("melon", 2013); map.p.. 2020. 3. 23.
[알고리즘] 배낭 문제(Knapsack Problem) 배낭 문제(Knapsack Problem) 배낭 문제란 배낭에 담을 수 있는 무게의 최대값이 정해져 있고, 일정한 가치와 무게가 정해져있는 짐들을 배낭에 닮을 때, 가치의 합이 최대가 되도록 짐을 고르는 방법을 찾는 문제이다. 배낭 문제는 크게 1) 물건을 쪼갤 수 있는 배낭문제(Fraction Knapsack Problem)와 2) 물건을 쪼갤 수 없는 배낭문제(0/1 Knapsack Problem)으로 나뉜다. 1) 물건을 쪼갤 수 있는 배낭문제의 경우는 가치가 큰 물건부터 담고, 남은 무게 만큼 물건을 쪼개는 방식으로 그리디 알고리즘으로 해결할 수 있다. 2) 물건을 쪼갤 수 없는 배낭문제의 경우는 동적계획법(DP, Dynamic Programming)을 활용해 해결할 수 있다. 0/1 Kanpsa.. 2020. 3. 2.
[알고리즘] 최장 공통 부분수열(LCS, Longest Common Subsequence) 최장 공통 부분수열(LCS, Longest Common Subsequence) 최장 공통 부분 수열은 두 개의 문자열이 주어졌을 때, 문자로 이루어진 부분 수열 중에서 가장 긴 문자열이 일치하는 수열을 말한다. 예를 들어 cdabe와 cdegt가 주어졌다면 이 두 문자열의 최장 공통 부분수열은 cdabe, cdegt 즉, 길이가 3인 부분수열 {c, d, e} 된다. 최장 공통 부분수열 과정 최장 증가 수열은 동적 계획법(DP, Dynamic Programming)을 이용해 풀 수 있다. 각각 n, m길이의 두 문자열 str1, str2가 주어졌을 때, n X m 크기의 2차원 배열을 만든다. 이 2차원 배열은 각 문자열, i번째, j번째 원소까지의 최장 공통 부분을 저장할 배열이다. 각 문자열의 부분문.. 2020. 3. 2.
[알고리즘] 최장 증가 수열(LIS, Longest Increasing Subsequence) 최장 증가 수열(LIS, Longest Increasing Subsequence) 최장 증가 수열이란 어떤 수열이 주어졌을 때, 최장으로 증가하는 부분 수열을 말한다. 즉, 1, 2, 3, ..., i, i+1, i+2, ..., n까지의 수열 a[n]이 주어졌을 때, a[i] 2020. 3. 2.
[알고리즘] 에라토스테네스의 체 에라토스테네스의 체 에라토스테네스의 체는 고대 그리스의 수학자 에라토스테네스가 소수를 찾기위해 만들어낸 방법으로, 마치 체를 치듯이 수를 걸러내기 때문에 에라토스테네스의 체라고 부른다. '에라토스테네스의 체'로 소수를 구하는 방법은 2부터 시작해 하나의 수를 뽑고, 뽑은 수의 배수를 소수의 후보에서 제외시킨다. 에라토스테네스의 체 과정 만약, 1부터 10까지의 수 중 소수를 찾는다면 2부터 시작해서 2의 배수를 소수의 후보에서 제외시킨다. 2, 3, 4, 5, 6, 7, 8, 9, 10 (1은 소수가 아니므로 후보에서 제외)에서 2의 배수를 제거하면 2, 3, 5, 7, 9가 남는다. 2, 3, 5, 7, 9 에서 3의 배수를 제거하면 2, 3, 5, 7이 남는다. 이러한 방식으로 소수의 후보를 계속해서.. 2020. 2. 27.
[알고리즘] 되추적(Backtracking) 알고리즘 되추적(Backtracking) 알고리즘 되추적 알고리즘은 핵심은 '배제'와 '풀이 시간 단축'이다. 조건을 만족하는 모든 경우의 한에서 모든 조합을 탐색한다. 되추적 알고리즘은 적용할 수 있는 대표적인 완전 탐색 알고리즘은 깊이우선탐색(DFS)이다. 깊이 우선 탐색(DFS)는 현재 노드에서 방문해야하는 곳까지 재귀나 스택을 이용해 단말 노드에 도착할 때 까지 깊이 곳을 탐색하는 방법이다. 하지만 DFS의 경우 모든 노드를 방문하기 때문에 굳이 방문해도 되지 않을 노드까지 방문하게되고 이로인해 비효율을 초래한다. 되추적 알고리즘은 이러한 비효율을 해결한다. 노드를 방문함에서 있어서 문제 해결에 가능성이 있지 않은 노드는 배제하므로써 비효율을 해결한다. 즉, 되추적 알고리즘은 DFS에 Pruning을 통해.. 2020. 2. 16.
[알고리즘] 너비 우선 탐색(BFS : Breadth First Search) 알고리즘 너비 우선 탐색 알고리즘이란? 한 노드에서 인접한 노드을 우선으로 탐색하는 방법으로 그림과 같은 그래프가 주어졌을 때, 넓게 탐색한다. BFS는 큐로 구현할 수 있고 주로 두 노드 간의 최단 경로를 찾을 때 사용할 수 있다. 너비 우선 탐색 과정 1) 시작 노드를 큐에 넣는다. 2) 큐에서 노드 하나를 꺼내고 꺼낸 노드와 인접한 노드를 모두 큐에 넣는다 3) 다시 큐에서 노드 하나를 꺼내 인접한 노드를 큐에 모두 넣는다. 4) 큐에 더 이상 노드가 없을 때까지, 즉, 인접한 노드가 존재하지 않을 때까지 반복한다. 너비 우선 탐색 구현 너비 우선 탐색을 소스코드로 구현하기 위해서는 먼저 그래프를 인접행렬로 만들어주어야한다. 인접행렬? 인접행렬이란 그래프가 주어졌을 때, 각 노드와의 연결관계를 이차원 행렬로.. 2020. 1. 14.
[알고리즘] Greedy Algorithm(탐욕 알고리즘) Greedy Algorithm[탐욕 알고리즘]이란? 각 단계에서 가장 최선의 선택지(가장 큰, 가장 작은 등)를 고르는 것. Greedy 알고리즘은 구현이 쉽다는 장점이 있지만, 항상 최선의 답을 구하는 것은 아니다. Greedy Algorithm을 활용 가능한 문제 1) 거스름돈 x라는 금액의 거스름돈이 주어야할 때, 10,000원, 5,000원, 1,000원, 500원, 100원으로 가장 적은 갯수의 거스름 돈을 주어야하는 상황 #include using namespace std; int main(){ int x, cnt = 0; cin >> x; // 가장 큰 액수의 화폐부터 선택 cnt += x / 10000; x = x % 10000; cnt += x / 5000; x = x % 5000; cn.. 2020. 1. 8.
Language of the Computer 컴퓨터가 사람의 언어를 이해하는 과정 사람 -> High level language(C, C++, Java..) -> Assembly language(Instruction) -> machine language(Binary) -> CPU ISA(Instruction Set Architecture) - Instruction의 집합 1) Instruction - 하드웨어와 소프트웨어의 인터페이스 - 프로세서의 동작을 묘사하는 기본 명령 2) CISC (Complex Instruction Set Computer) - 비교적 오래됨 - 복잡하고 많은 명령어로 이루어짐 - 어셈블리 프로그래밍이 쉬운 반면에 CPU 설계가 어려움 3) RISC (Reduced Instruction Set Computer) - 비교적 .. 2019. 12. 23.
Computer Abstraction and Technology Computer 1) 컴퓨터의 종류 - Personal computer : 개인이나 기업에서 범용적으로 사용되는 컴퓨터. 가격과 성능의 절충 - Server computer : 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터. 높은 용량, 성능, 신뢰성 - Super computer : 과학기술연산 등 다양한 분야에 사용되는 초고속/거대용량 컴퓨터 - Embedded computer : 다른 기계가 시스템에 내장되어 있는 컴퓨터 2) Post-PC Era - 특정 기능에 특화되고 사용자의 인문학적 소비 겨험에 더 집중하는 디바이스(Personal Mobile Device, Cloud computiong) Eight Great Ideas In Computer Architectures 1) M.. 2019. 12. 22.
Processor - Datapath datapath란? 데이터패스란 CPU안에서 데이터와 주소, 레지스터의 처리 및 연산을 하는 모든 요소를 의미한다 (instruction memory, data memory, PC, Register file, ALU 등 ..) 1. Instruction fetch instruction memory에서 Instruction을 읽어들인다. 1) PC(program count) : 실행해야할 명령어의 주소를 가지고 있는 레지스터 2) Instruction memory : PC로 부터 주소를 읽어들이고 주소에 맞는 Instruction을 output으로 내보냄 3) Add : PC 값을 4byte 씩 증가시키는 연산 수행하므로써 다음 명령어의 주소값으로 PC를 업데이트 시켜줌 2. To implement R-f.. 2019. 12. 17.
Memory Hierarchy Ideal Memory(이상적인 메모리) - 지연시간이 코스트가 없고, 대역폭과 용량이 무한 - 이상적인 메모리의 요구조건은 서로 상반됨(용량이 크면 느려지고, 빠르거나 대역폭이 높아지면 비싸짐) 1. 메모리 종류 1) 휘발성 메모리(volatile memory) (1) SRAM(Static Random Access Memory) - 속도 : 빠름(커패시터가 없음) - 밀도 : 낮음(6T(트렌지스터) cell) - 비용 : 높음 - 커패시터가 없으므로 refresh할 필요없음 (2) DRAM(Dynamic Random Access Memory) - 속도 : 느림(커패시터 있음) - 밀도 : 높음(1T(트렌지스터) 1C(커패시터) cell) - 비용 : 낮음 - 커패시터로 인해 refresh(배터리를 충전.. 2019. 12. 16.