[주제]- 'for문'의 작동 구조 및 방식 [중요]- 초기화는 한 번만 진행- 처리 순서 '초기화 → 연산식 → 조건식 → 내용 실행' [소스 코딩]package loopClass; class loopClass { public static void main(String[] args) {/* [제어문] for(초기화; 조건식; 연산식) { 내용 } - 초기화 진행 ※ 초기화는 한 번만 진행 - '{ }'안에 있는 내용을 실행 후 조건식 판단 - 연산식 진행 ※ '++i 또는 i++'처럼 사용 시 둘다 동일하게 처리됨 - 조건식 진행 - 조건식이 참(True)일 경우 초기화 다음부터 다시 진행 - 조건식이 거짓(False)일 경우 for문 종료*/ int i, j; for(i=0; i
[힙의 데이터 저장과정]- '최소 힙'을 기준으로 설명 ※ 데이터의 저장 값이 낮은 것이 우선순위가 높음 - 자식 노드 데이터의 우선순위 ≤ 부모 노드 데이터의 우선순위- 새로운 데이터는 우선순위가 제일 낮다는 가정하에 '마지막 위치'에 저장 ※ 마지막 위치: 트리의 마지막 레벨의 가장 오른쪽 - 그리고 부모 노드와 우선순위를 비교해가면서, 해당 우선순위 위치를 찾을 때까지 거슬러 올라가면서 교환을 반복 ■ 그림(추가과정) - 완전 이진 트리 예시 - 새로운 노드가 마지막 위치에 생성됨 - 부모 노드와 우선순위 비교- '2 > 10' 우선순위가 더 높으므로 위치 교환 - 다시 부모 노드와 우선순위 비교- '2 > 3' 우선순위가 더 높으므로 위치 교환 - 다시 부모 노드와 우선순위 비교- '2 < 1' ..
[우선순위 큐의 개념]- 기존 큐와 다르게 데이터가 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 꺼내짐- 데이터에 우선순위가 별개로 지정되지 않으며 값을 기준으로 순서가 동적으로 지정 ※ 데이터 값의 오름차순 또는 내림차순으로 기준을 잡을 수 있으며, 개발자가 결정 - 구현 방법에는 '배열, 연결 리스트, 힙'이 있음 [배열과 연결 리스트 구현 시 문제점] ■ 배열- 데이터의 우선순위가 높을수록 배열의 앞쪽에 위치시킴- 우선순위가 높은 데이터의 반환과 소멸이 쉬움★ 데이터를 삽입 및 삭제하는 과정에서 데이터를 한 칸씩 앞으로 또는 뒤로 옮기는 연산이 필요★ 삽입의 위치를 찾기 위해서 모든 데이터와 우선순위를 비교하면서 진행해야 함 ■ 연결 리스트★ 배열과 다르게 데이터 위치를 옮기는 작업은 없으..
[주제]- 논리 연산자 종류와 처리 결과인 참(True)과 거짓(False)이 나오는 조건 [중요]1. AND(&&): 2개의 조건 모두 해당 되어야 참(True)2. OR(||): 2개의 조건 중 1개만 해당되어도 참(True)3. NOT(!): 조건에 해당되지 않아야 참(True)4. 삼항연산(?): 1항 조건이 참(True)이면 결과에 2항을 저장, 거짓(False)이면 3항을 저장 [소스 코딩]package logicalClass; class logicalClass { public static void main(String[] args) {// [논리연산자 종류] logical Operator// 조건에 해당되면 결과가 참(True)이 되고, 아니면 거짓(False)이 됨 int num = 50;..
[주제]- 비트 연산의 기호와 처리 결과 [중요]1. AND(&): 비교 값 둘다 '1'이면 1, 아니면 '0'2. OR(|): 비교 값 둘 중 하나라도 '1'이면 1, 아니면 '0'3. XOR(^): 비교 값 둘 중 하나라도 '1'이면 1, 둘 다 '1' 또는 '0'이면 '0'4. NOT(~): 0 ↔ 1 교환5. 왼쪽 쉬프트(): 10진수를 기준으로 1회당 '/2' 연산 [소스 코딩]package bitClass; class bitClass { public static void main(String[] args) {// [연산의 종류] byte b; // 1. AND연산 : &// 같은 위치의 값이 둘 다 1이면 1, 아니면 0 b = 0x57 & 0x41; System.out.println("b =..
[주제]- 랜덤 클래스를 사용하여 무작위 값 뽑아내기 [중요]- random() 메소드는 'double'형 값을 반환- '* n'개 만큼 범위가 결정. ※ 값은 '0'부터 시작 [소스 코딩]package randomClass; class randomClass { public static void main(String[] args) { int r_num; r_num = (int)(Math.random() * 5) + 1;// random() 메소드는 double형 값을 반환하기 때문에 int형인 num에 저장하기 위해선 형변환(int)이 필요// random() 메소드에 '*' 한 숫자가 0 ~ n개를 결정 ※ ex) * 3 == 0~2(0, 1, 2)// 0이 나오지 않게 하려면 + 1 필요 r_num ..
[주제]- 사칙연산(+, -, *, /)과 % 연산- 증가 연산(++), 감소 연산(--) [중요]- 음수 변환은 '-1'을 '*' 하거나, 변수 앞에 '-'를 작성하여 다시 저장- 증가(++)/감소(--) 연산은 숫자 '1'씩만 변화- 변수 '앞'에 증/감 연산자가 위치하면 연산 처리 후 저장- 변수 '뒤'에 증/감 연산자가 위치하면 저장 후 연산 처리 [소스 코딩]package OperatorClass; class OperatorClass{ public static void main(String[] args) {// [Operator란?]// + - * / % int num1, num2; int result; num1 = 50; num2 = 5; result = num1 + num2; System.o..
[주제]- Scanner 클래스를 사용하여 사용자가 값을 입력 [중요]- 변수의 자료형에 따라 '.next*' 함수를 다르게 호출- '*' 자리에 자료형 이름을 작성. 자료형의 첫글자는 대문자 ※ ex) boolean: .nextBoolean # 예외- 'String'은 '.nextLine' - Scanner 클래스 사용이 끝나면 '.close()'로 종료 ※ 에러는 없으나 경고 발생(메모리 낭비) [소스 코딩]package inputClass; import java.util.Scanner; // 자바에 속한 유틸리티 중 'Scanner'를 불러오기//import java.util.*; // 자바에 속한 모든 유틸리티를 불러오기 class inputClass{ public static void main(..
[주제]- 변수의 선언, 저장, 초기화 방식- 변수의 종류에 따른 저장되는 값의 종류와 범위 [중요]- 정수는 'int', 실수는 'double'을 주로 사용 ※ 실수형 'float'는 'double'보다 정확도가 낮음 [소스 코딩]package Variable; class Variable{ public static void main(String[] args) {// [변수의 정의] int num; // 변수 선언(정수)// 자료형 변수명 num = 1; // 변수 'num'에 정수 '1' 대입 System.out.println("num = " + num); num = 1 + 1; // 변수 'num'에 '1 + 1' 연산한 결과를 대입 System.out.println("num = " + num); i..
[주제]- 함수, 변수의 코드가 작성되는 구역- 출력(println 함수)에 관련된 내용 [기초]- class 이름과 저장되는 소스의 이름은 동일해야 함 [소스 코딩]class MyClass { // 멤버변수의 선언구역 // 멤버함수의 작성구역 public static void main(String[] args) { // 로컬변수의 선언구역 & 사용구역 System.out.println("Hello World!"); // System.out.print("헬로우"); // 한 줄 주석은 줄 가장 왼쪽에 '//'를 삽입 // System.out.print("헬로우"); // 주석된 영역은 컴파일 시 제외됨 System.out.println("헬로우 월드"); /* // 범위 주석은 슬래시(/)에 '*'를 추..
[소스 코딩] ※ 이진 트리는 이전에 구현한 'BinaryTree2.h', 'BinaryTree2.c'를 활용※ 스택은 이전에 구현한 'ListBaseStack.h', 'ListBaseStack.c'를 활용 ■ ExpressionTree.h#ifndef EXPRESSIONTREE_H_#define EXPRESSIONTREE_H_ #include "BinaryTree2.h" BTreeNode * MakeExpTree(char exp[]); // 입력 받은 후위 표기법 수식을 수식 트리로 변환int EvaluateExpTree(BTreeNode * bt); // 수식 트리의 연산 void ShowPrefixTypeExp(BTreeNode * bt); // 변환된 수식 트리를 전위 표기법으로 출력void Sh..
[수식 트리의 개념]- 전위/중위/후위 표기법과 같은 하나의 수식을 표현하는 방식 ■ 그림(수식 트리의 예) ※ 수식 예: 9 – 6 / 2 + 4 ■ 그림(수식 트리의 연산 과정) [수식 트리의 구현 과정]- 중위 표기법의 수식을 입력 받음 → 수식 트리로 표현- 연산자, 피연산자는 스택으로 관리 [수식 트리의 표현]- 후위 표기법의 수식에서 앞쪽에 등장하는 피연산자와 연산자로 트리의 하단을 만들고, 계속해서 뒤 (피)연산자들을 그 위로 계속해서 구성해 나감 ■ 그림(수식 트리의 구성 과정) - 후위 표기법 수식 '8 2 - 2 /'를 스택을 활용하여 수식 트리로 구성 - 수식에서 조회된 문자가 '피연산자'이면 스택에 넣음 - 위와 동일 - 수식에서 조회된 문자가 '연산자'이면 스택에 저장된 피연산자를..
[순회 종류] ■ 그림(중위, 후위, 전위) 1. 중위 순회: 루트 노드의 왼쪽 자식 노드를 먼저 방문 후에 루트 노드를 중간에 방문하는 방식2. 후위 순회: 루트 노드의 왼쪽 자식, 오른쪽 자식을 방문 후 루트 노드를 마지막에 방문하는 방식3. 전위 순회: 루트 노드를 먼저 방문 후 왼쪽 자식, 오른쪽 자식을 방문하는 방식 [순회의 재귀] ■ 그림(중위 순회 재귀) ■ 이진 트리를 대상으로 중위 순회를 할 경우의 순회 순서1단계: 왼쪽 서브 트리의 순회2단계: 루트 노드의 방문3단계: 오른쪽 서브 트리의 순회 ※ 공집합(NULL) 값을 가진 노드를 방문하기 전까지 하위 단계로 순회를 반복 [소스 코딩] ※ 이전에 사용한 '이진 트리 구현(BinaryTree.h, BinaryTree.c)' 소스를 업데이..
[배열 기반과 연결 리스트 기반] ■ 그림(배열 기반 트리) - 트리가 완성 된 이후부터는 그 트리를 대상으로 매우 빈번한 탐색이 이뤄지기 때문에 연결 리스트보다 탐색이 빠른 이점이 있음- 노드에 번호가 부여됨 ※ 인덱스 '0'은 사용해도 문제없으나 인덱스 번호와 노드 번호 매치를 위해 편의상 사용하지 않음 ■ 그림(연결 리스트 기반 트리) - 연결 리스트 구성 형태와 트리 형태와 일치한다는 점 ※ 우선 연결 리스트 기반으로 구현. 배열 기반은 '완전 이진 트리의 구조를 갖는 '힙(heap)'이라는 자료구조 구현 시 활용할 예정 [이진 트리의 ADT] BTreeNode * MakeBTreeNode(void);- 이진 트리 노드를 생성하여 그 주소 값을 반환 int GetData(BTreeNode * bt..
[트리의 개념]- 트리는 계층적 관계(Hierarchical Relationship)를 표현하는 자료구조 ■ 그림(트리의 계층 개념) ■ 중요 포인트- 데이터의 저장, 검색 및 삭제 등의 기능의 정의보다, 무엇인가를 표현하기에 적절히 정의되었는지가 더 중요 [트리 관련 용어] ■ 그림(트리 표현) ■ 관계- 노드간에는 '부모(Parent), 자식(Child), 형제(Sibling)'의 관계가 성립되어 있음- 노드 'A'는 노드 'B, C, D'의 부모 노드- 노드 'B, C, D'는 노드 'A'의 자식 노드- 노드 'B, C, D'는 부모 노드가 같으므로, 서로가 서로에게 형제 노드 1. 노드(Node)- 트리의 구성요소에 해당하는 'A, B, C, D, E, F'와 같은 요소 2. 간선(Edge)- 노..
1.판단 (Judgment)- 애매모호한 상황에서도 항상 현명한 결정을 내린다.- 문제가 발생한 근본적인 원인을 파악하고 해결책까지 도달한다. - 전략적으로 생각하고 스스로 어떤 사람인지, 어떤 것을 시도하고 있는지 명확하게 표현해야 한다. 2.의사소통 (Communication)- 지위와 상관없이 경청해서 상대방의 의도와 목적을 정확하게 판단할 수 있도록 한다.- 말을 하든 글을 쓰든 간결하고 분명하게 해야 한다. 3.임팩트 (Impact)- 중요한 업무에 대해 지속적으로 뛰어난 업무능력을 보여준다.- 업무의 절차적인 과정보다는 뛰어난 성과(great results)에 집중한다. 4.호기심 (Curiosity)- 전반적인 회사의 전략, 시장, 고객에 대해 빠르게 이해한다.- 광범위한(전문분야를 벗어나는..
[덱의 개념] - 스택과 큐의 특성의 조합한 형태로서 데이터를 앞으로도 뒤로도 넣을 수 있고, 앞으로도 뒤로 뺄 수 있는 자료구조 [덱의 ADT] void DequeInit(Deque * pdeq);- 덱의 초기화를 진행- 덱 생성 후 제일 먼저 호출되어야 하는 함수 int DQIsEmpty(Deque * pdeq);- 덱이 빈 경우 TRUE(1)을 반환, 그렇지 않은 경우 FALSE(0)을 반환 void DQAddFirst(Deque * pdeq, int data);- 덱의 '머리'에 데이터를 저장. data로 전달된 값을 저장 void DQAddLast(Deque * pdeq, int data);- 덱의 '꼬리'에 데이터를 저장. data로 전달된 값을 저장 int DQRemoveFirst(Deque..
[주제] - 주문한 음식이 포장되어 나오기를 기다리는 고객을 위한 대기실을 만드려고 함 [조건] - 운영 시간은 1시간- 고객의 첫 주문 이후 15초당 다음 1명씩 주문- 고객은 총 3가지 햄버거 중 무작위로 1개만 주문가능- 햄버거 조리 시간(치즈버거 12초, 불고기버거 15초, 더블버거 24초)- 한 번에 하나의 햄버거만 조리가능- 조리가 끝나기 전까지 다음 주문을 받지 않음- 주문 처리가 된 고객은 대기실에서 나옴 [목표] - 1시간 동안 여러 종류의 햄버거를 요리하는 상황에서 고객을 대기시킬 수 있는 대기실의 크기를 산출하기 위하여 크기에 따라 얼마나 안정적으로 수용할 수 있는지 확률적으로 나타내기 ※ 예) 수용인원이 30명인 공간: 안정적으로 고객을 수용할 확률은 50%(시뮬 10회 시도 시 5..
[연결 리스트 기반 스택과 큐의 차이점] - 스택은 'push'와 'pop'이 같은 위치에서 처리가 되는 반면, 큐는 'enqueue'와 'dequeue'가 다른 위치에서 처리가 됨 [소스 코딩] ■ ListBaseQueue.h #ifndef LISTBASEQUEUE_H_#define LISTBASEQUEUE_H_ #define TRUE 1#define FALSE 0 typedef struct _node{ int data; struct _node * next;} Node; typedef struct _lQueue{ Node * front; // 삭제할 노드를 가리키는 용도 Node * rear; // 생성된 노드를 가리키는 용도} LQueue; typedef LQueue Queue; void QueueI..
- Total
- Today
- Yesterday
- VCL
- 여행영어 100일의 기적
- 응용
- SWT
- wfd
- RA
- System
- 왕초보 영어회화 100일의 기적
- 일기
- 설명
- 계산기
- 문법
- 대상
- java
- 영어
- 알고리즘
- 정렬
- tdataset
- SysUtils
- 상황
- 독해
- 말하기
- Delphi
- 교육센터
- 자료구조
- Reference
- ADODB
- 작문
- Pte
- 스택
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |