7. DFS & BFS 1. DFS (Depth First Search) - 깊이 우선 탐색 알고리즘 기준이 되는 노드로부터 멀리 있는 노드, 즉 깊이가 있는 노드를 우선시해서 탐색하는 것 DFS의 구현을 위해서는 스택: 경로 정보의 추적을 목적으로 한다. 배역: 방문 정보의 기록을 목적으로 한다. 2. BFS (Breadth First Search) - 너비 우선 탐색 알고리즘 기준이 되는 노드로부터 가까이 있는 노드, 즉 깊이가 얕고 너비를 넓고 탐색하는 것 BFS의 구현을 위해서는 큐: 방문 차례의 기록을 목적으로 한다. 배열: 방문 정보의 기록을 목적으로 한다. ※ DFS와 BFS는 실전에서 쓰기에는 많이 느린 알고리즘에 속한다. 3. 되추적법, 백트레킹(Backtraking) 문제 해결을 위해 ..
6. 재귀함수 1. 재귀함수 (Recursiond function) Bace Case - 기본 값, 무한루프에 빠지지 않게 한다. Recursive Case - 반복하다 base case로 빠진다. 2. 재귀함수 활용 1) 팩토리얼 계산 int fn(n) { if (n == 0) return 1; else return n * fn(n-1); } 2) 피보나치 계산 int fn(n) { if (n == 0 || n == 1) return 1; else return (fn(n-1) + fn(n - 2)); } 3) 최대공약수 계산 간소화 (유클리드 메소드) int fn(n, m) { if (m < n) { int temp = m; n = m; n = temp; } if (n == 0) return m; el..
5. 포인터 1. 포인터 자료의 주소를 저장하는 변수. (값 참조) 형태: 자료형 *변수이름; * : 포인터 변수를 선언하는 포인터 연산자 & : 변수의 주소 알려주는 주소연산자 ex) int *pointer; int num = 1; pointer = # // pointer 변수에 현재 num의 주소값 저장 포인터 변수에 값을 할당하고 싶으면 넣고 싶은 주소를 변수에서 주소연산자, &을 이용해 뽑는다. & 연산자를 피연산자의 주소로 반환한다. & 연산자의 피연산자는 반드시 변수이어야만 한다. 포인터 변수와 형(int, float, ...)과 주소값에 저장될 변수의 자료형은 반드시 일치해야 한다. 포인터 변수를 선언하고 당장 사용하지 않으면 NULL 값을 채워넣는 것을 권장한다. - 널포인터 보통변..
4. 오버 플로우 & 언더플로우 정해진 변수의 데이터 타입의 최솟값 미만의 값, 혹은 최댓값 초과의 값을 해당 데이터 타입의 변수에 입력하면 이 변수에는 오류가 발생한다. 최솟값 미만의 값을 넣으면 언더플로우로 최댓값부터 다시 시작 최댓값 초과의 값을 넣으면 오버플로우로 최솟값부터 다시 시작 데이터 타입이 표기 가능한 값의 범위를 초과했기 때문에 범위가 한 바퀴 순환하여 다시 반대편에서부터 시작. 그래서 입력될 값의 최솟값과 최댓값을 고려해서 변수의 데이터 타입을 정해줘야 한다. 또, 무턱대고 큰 값의 데이터 타입을 정해주면 메모리 낭비 등 프로그램의 효율성이 저하되니 주의.
3. 정적 메모리 할당 & 동적 메모리 할당 1. 정적 메모리 할당 (Static Memory Allocation) 컴파일 시에 메모리 할당 받고, 프로그램 종료 시 해제한다. ex) int a[10]= 0; 2. 동적 메모리 할당(Dynamic Memory Allocation) 프로그래미러가 힙 영역에 메모리를 할당하는 것. 런타임 시(프로그램 실행 중)에 메모리를 할당 받고, 때 해제할 수 있다. 오버플로우(overflow)를 방지하고, 메모리 낭비를 방지한다. ex) malloc, free 함수 3. Malloc 메모리를 동적으로 할당하는 것만이 목적으로 초기값 지정은 안 된다. 기본적으로 사이즈는 매개변수로 return 타입은 void로, sizeof와 캐스트 연산자의 도움을 받아야 쉬운 코딩이 ..
2. 정적 라이브러리 & 동적 라이브러리 1. 정적 라이브러리 (Static Library) 컴파일되어 있는 오브젝트 파일들이 하나로 묶여있는 형태. 1) 장점 런타임이 없다. 실행 파일을 배포할 때 포함하지 않는다. 컴파일 타임에 정적 라이브러리에 연결하는 것이 일반적으로 개별 소스 파일에 연결하는 것보다 빠르다. 2) 단점 업데이트 시, 프로그램을 새 실행 파일로 다시 컴파일해야 한다. 해당 라이브러리를 사용하는 시스템의 모든 프로그램은 실행 파일에 사본을 포함한다. 즉, 매우 비효율적이다. 2. 동적 라이브러리(Dynamic Library) 컴파일되어 있는 오브젝트 파일 그 자체. 1) 장점 프로그램을 실행할 때 라이브러리 파일의 단일 사본만 메모리에 로드하므로 해당 라이브러리를 사용하여 여러 프로..
1. 공간 복잡도 & 시간 복잡도 1. 공간 복잡도(Space Complexity) 알고리즘 메모리 사용량에 대한 분석결과 2. 시간 복잡도(Time Complexity) 알고리즘 수행시간 분석결과 3. Big-O 표기법(Big-O Notation) 시간 복잡도에서 가장 큰 영향을 미치는 차항으로 시간복잡도를 나타내는 것 4. Big-O 종류 O(1) - 상수 시간: 입력값 n이 주어졌을 때, 알고리즘이 문제를 해결하는데 오직 한 단계만 거침. O(log n) - 로그 시간: 입력값 n이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듬, 이진탐색. O(n log n) - 선형로그 시간: 퀵 정렬, 병합 정렬, 힙 정렬. O(n) - 직선적 시간: 문제를 해결하기 위한 단..
4. 비트 연산자 1. 비트 (Bit) 두가지 중 1가지 값을 저장할 수 있는 단위, 흔히 0과 1로 표현하지만, 이는 시각적인 것. 2. 바이트 (Byte) 8개의 비트로 구성, 2의 8승인 256가지의 경우의 수 저장 가능. ※ 1Byte = 8Bit (2의 3제곱Bit) 1KByte = 1024Byte (2의 10제곱Byte) 1MByte = 1024KByte (2의 10제곱KByte) 1GByte = 1024MByte (2의 10제곱MByte) 1TByte = 1024GByte (2의 10제곱GByte) 3. 비트 연산자 왼쪽시프트 연산자 첫번째 피연산자의 비트를 두번째 피연산자의 수만큼 오른쪽으로 이동 첫번째 피연산자: int, uint, long, ulong 두번째 피연산자: int 논리곱(A..
[ 초보자를 위한 C# 200제 ] C#_012 using System;using System.Collections.Generic;using System.Linq;using System.Text; /* 삼항 연산자( ? : ) * * if~else를 간단하게 만든 수식 * D = C ? A : B * C(조건식)을 실행하여 결과가 참이면 A를 D에 대입하고, * 거짓이면 B를 D에 대입한다. * * ? : 가 동시에 보이면 삼항 연산자를 바로 떠올르기 * */ namespace Project_012{ public class Numbers { // 짝수인가? public static bool IsEven(int num) { bool isP = (num % 2 == 0) ? true : false; retu..
[ 초보자를 위한 C# 200제 ] C#_011 using System;using System.Collections.Generic;using System.Linq;using System.Text; // if ~ else namespace Project_011{ public class Numbers { public static bool IsEven(int num) // num이 짝수인지 판단하기 { bool isP = false; if(num % 2 == 0) // 2로 나누어 나머지가 0이면 짝수, 나머지가 1이면 홀수 { isP = true; // 짝수면 true } // 아래 3줄은 생략해도 무관 else { isP = false; } return isP; } public static bool IsO..
[ 초보자를 위한 C# 200제 ] C#_010 using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Project_010{ class Program { static void Main(string[] args) { /* 키워드(예약어)와 이름명령법 * * 키워드는 프로그램에서 이미 정의되어 사용되고 있는 것 * 사용자가 변수나 클래스, 메서드의 이름으로 선언하여 사용할 수 없다. * 키워드는 "모두" 소문자이다. * * 식별자(identifier): 클래스, 메서드, 변수의 이름으로 사용되는 규칙 */ } }}
- Total
- Today
- Yesterday
- 서울대
- 이광근
- 프로그램
- 초보
- 동적
- 정수
- 기본개념
- 뇌를 자극하는 C# 5.0 프로그래밍
- 수리 명제 자동판결 문제
- 에니그마
- 앨런 튜링
- 두 수 입력
- 독서
- 오버플로우
- 나눗셈
- 비전공자
- 초보자를 위한 C# 200제
- c#
- 튜링
- 컴퓨터과학
- 영화
- 메서드
- dynamic
- 컴퓨터과학이 여는 세계
- 계산기
- c
- 프로그래밍
- 컴퓨터의 시초
- 기계적 추론
- 유니티 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |