Computer science 18

[Algorithm] DFS (깊이 우선 탐색)

1. DFS : Depth-First Search 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS는 스택 자료 구조, 재귀 함수를 이용한다. 구체적인 동작 과정은 다음과 같다. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 더 이상 2번 과정을 수행할 수 없을 때까지 반복한다. 과정을 그림으로 나타내면 다음과 같다. 이러한 과정을 반복하였을 때, 전체 노드의 탐색 순서(스택에 들어간 순서)는 다음과 같다. python 코드로 구현하면 다음과 같다.

[Algorithm & Data Structure] Stack(스택) 자료 구조

스택 자료 구조 ? : 스택 자료 구조는 먼저 들어온 데이터가 나중에 나가는 형식의 자료 구조이다. 스택은 입구와 출구가 같은 형태로서, 아래와 같이 시각화 할 수 있다. 스택 자료 구조의 동작은 선입후출이기 때문에, 나중에 삽입된 데이터 부터 삭제되는 것을 아래의 예시에서 볼 수 있다. 이를 바탕으로 python 코드로 구현한 그림이다.

[Algorithm & Data Structure] Queue(큐) 자료 구조

큐 자료 구조? : 큐 자료 구조는 먼저 들어온 데이터가 먼저 나가는 형식의 자료 구조이다. 큐는 입구와 출구가 모두 뚫려 있는 터널 같은 형태로서, 아래와 같이 시각화할 수 있다. 큐 자료 구조의 동작은 선입선출이기 때문에, 먼저 삽입된 데이터부터 삭제되는 것을 아래의 예시에서 볼 수 있다. 이를 바탕으로 python 코드로 구현한 그림이다. from collections import deque; # 큐(queue) 구현을 위해 deque 라이브러리 사용 queue = deque() # 삽입(1) - 삽입(3) - 삭제() - 삽입(2) queue.append(1) queue.append(3) queue.popleft() queue.append(2) # 먼저 들어온 순서대로 출력 print(queue)..

[Algorithm] 구현 알고리즘 (Implementation)

1. 구현 알고리즘 간단하게 말해서, 풀이를 떠올리는 것은 쉽지만 코드로 구현하기 어려운 문제의 유형을 말한다. 일반적으로 알고리즘 문제에서의 2차원 공간은 행렬(Matrix)의 의미로 사용되는데, 시뮬레이션 및 완전 탐색 문제에서 2차원 공간에서의 방향벡터가 자주 활용된다. 2. 구현 알고리즘 출제 유형 알고리즘은 간단한데 코드가 지나치게 길어지는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 2. 구현 해법 및 연습 문제를 풀어나갈 수 있는지 생각한다. 이를 코드로 구현하는 과정을 단계로 나누어서 정리한다. (주석으로 정리) 단계별로 하나씩 차근차근 코드를 작성한다. 문제를 접했을 때 ..

[Algorithm] 그리디 알고리즘(greedy)

1. 그리디 알고리즘? 그리디 알고리즘은 탐욕적으로 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 문제를 해결하는 과정에서 그 순간순간마다 최적이라고 생각되는 결정을 하는 것이다. 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구한다. 2. 그리디 해법? 그리디 해법은 정당성 분석이 중요하다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토해보고 타당한 근거를 정리하는 연습을 할 필요가 있다. 따라서, 코딩 테스트에서는 탐욕 법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제된다.

[Computer science] 부동 소수점 표현 방식

1. 부동 소수점(Floating point) 표현 과정 1) 실수를 2진수로 표현 한다. -> 기본적으로 컴퓨터는 숫자를 표현할 때 2진수를 사용하기 때문이다. 예를 들어, 93.21 를 변환한다고 했을 때, (1) 실수의 정수 부분(93)의 변환 93 / 2 = 46 ····· 1 46 / 2 = 23 ····· 0 23 / 2 = 11 ····· 1 11 / 2 = 5 ····· 1 5 / 2 = 2 ····· 1 2 / 2 = 1 ····· 0 1011101 이 된다. (2) 실수의 소수 부분(.21)의 변환 = 소수 부분 * 2 의 정수 부분 기록, 정수가 1이상이 되면 정수 부분을 버린 소수 부분으로 다시 연산을 계속함 0.21 * 2 = 0.42 ····· 0 0.42 * 2 = 0.84 ·..

Computer science 2020.09.08

[Algorithm & Data Structure] Bit operation (비트 연산)

Integer 32bits 공간으로 표현 할 수 있는 양의 정수 최대 값은 〖 2〗^31-1 이다. 32bits 공간으로 표현 할 수 있는 음의 정수 최대 값은 〖 2〗^31이다. (21억 정도) 왜냐하면 양수에서 0을 표현했기 때문에, 음수에서는 0을 포함하지 않아도 되기 때문이다 그런데 정수에는 양의 정수와 음의 정수가 있으므로, 그러므로 맨앞에 한칸은 +/- 사인으로 쓰기로 한다. 0 일 때는 양수, 1일 때는 음수

[Computer science] 컴퓨터와 프로그래밍

1. 컴퓨터를 사용하는 이유? - 인간이 하기 힘든 반복적 연산을 대신해주기 때문이다. 2. 프로그래밍? - 컴퓨터가 어떤 일을 수행할지 알려주는 작업 지시서를 만드는 작업 3. 프로그램? - 컴퓨터로 수행할 수있는 멍령어들의 집합 4. 프로그래밍 언어를 사용하는 이유? - 0과 1로 이루어진 기계어로 프로그램을 만드는 것은 너무 어렵기 때문에, 보다 쉽게 만든 어셈블리어가 나왔고, 더이를 더 쉽게 만든 언어가 프로그래밍 언어이다. - 결과적으로, 편리하게 이용하기 위해서 프로그래밍 언어를 사용하는 것이다. 5. 프로그램밍 언어를 컴퓨터가 어떻게 이해? - 컴퓨터가 이해할 수 있는 기계어로 바꾸어주는 번역 프로그램 (컴파일러, 인터프리터) 등이 필요하다.

Computer science 2020.07.17