분류 전체보기(324)
-
[Java] 바이트 스트림
바이트 스트림 클래스 - 바이트 단위로 바이너리 데이터가 흐르는 스트림 - 텍스트 파일(문자 데이터) + 이미지 파일(바이너리 데이터) 모두 입출력 가능 InputStream/OutputStream : 추상 클래스 / 바이트 입출력 처리를 위한 기능 보유 (슈퍼 클래스) FileInputStream/FileOutputStream : 파일 입출력을 위한 클래스 / 파일로부터 바이너리 데이터를 읽기/쓰기 가능 DataInputStream/DataOutputStream : boolean, char, int, long,... 타입의 값을 바이너리 형태로 입출력 / 문자열도 바이너리 형태로 입출력 바이너리 파일 쓰기 FileOutputStream - 변수나 배열에 들어 있는 바이너리 값(이진수)들을 그대로 파일에..
2021.12.17 -
[Java] 문자 스트림
문자 스트림 클래스 - Reader/Writer 형식 FileReader/FileWriter FileInputStream(InputStreamReader)/FileOutputStram(OutputStreamWriter) - 2byte의 유니코드 문자를 단위로 입출력하는 스트림 - 이미지, mp3 같은 바이너리 바이트 값들은 처리 X - 문자 입력 스트림 : 바이트들을 전달 받음 → 해당 바이트들을 '로컬 문자 집합(MS949)'에 있는 문자인지 비교하여 문자로 변환 FileReader - 문자열 단위의 자료처리 FileReader(File file) : file로부터 읽는 FileReader 생성 FileReader(String name) : name이름의 파일로부터 읽는 FileReader 생성 Fil..
2021.12.17 -
[Java] 입출력 스트림
스트림 입출력 - 스트림 : 연속적인 데이터의 흐름 or 데이터를 전송하는 소프트웨어 모듈 스트림은 도착한 순서대로 데이터를 흘러 보낸다 - 입출력 스트림 객체와 연결해서 쉽게 데이터 입출력을 실행 - 스트림의 양끝에는 입출력장치, 자바 응용프로그램이 연결된다 자바 응용 프로그램 : 입출력 스트림과만 연결 입출력 스트림 : 입출력 장치를 제어하고 실직적 입출력 담당 - 스트림은 단방향이다 - 스트림을 통해 흘러가는 기본 단위는 byte나 문자(char)이다 - 스트림은 FIFO(First In First Out) 구조이다 문자 스트림 - only 문자만 다룬다 → ASCII (a, b, c, &, !, ....) - 문자가 아닌 정보가 입력되면 응용프로그램에 이상한 문자가 전달된다 - 문자(char) 하..
2021.12.17 -
[Data Structure] 이진 탐색 트리
이진 탐색 트리 - root 기준으로 왼쪽 → root보다 작은 값 - root 기준으로 오른쪽 → root보다 큰 값 - 중위 순회 → 오름차순으로 정렬된 값 반환 1. 탐색 연산 node == NULL || key == node->key → 해당 node 리턴 key key → node = node->llink를 통해서 왼쪽 서브트리 탐색 key > node->key → node = node->rlink를 통해서 오른쪽 서브트리 탐색 - 순환 탐색 vs 반복 탐색 → 효율성 : 반복 treenode* search_recur(treenode* node, element data) { // 순환 탐색 함수 if (node == NULL || node->data == data) return n..
2021.12.15 -
[명품 Java] 7장 실습문제 (제네릭과 컬렉션)
[7장 1번] Scanner 클래스로 -1이 입력될 때까지 양의 정수를 입력받아 벡터에 저장하고 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라. package Java7_1; import java.util.*; public class Java7_1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Vector v = new Vector(); System.out.print("정수(-1이 입력될 때까지)>> "); while(true){ int num = sc.nextInt(); if(num == -1) break; v.add(num); } System.out.println("가장 큰 수는 " + Col..
2021.12.14 -
[명품 Java] 7장 Open Challenge (영어 단어 테스트 프로그램)
package OpenChallenge; import java.util.*; class Word{ private String eng, kor; Word(String eng, String kor){ this.eng = eng; this.kor = kor; } String getEng(){ return eng; } String getKor(){ return kor; } } public class WordQuiz { Scanner sc = new Scanner(System.in); Vector v = new Vector(); int[] r_quiz = new int[4]; WordQuiz(){ v.add(new Word("love", "사랑")); v.add(new Word("animal", "동물")); v..
2021.12.14 -
[Data Structure] 스레드 이진 트리
이진 트리 - 이진 트리에 n개의 노드가 있을 경우 2n개의 링크 존재 2n개의 링크 중, n+1개의 링크 = NULL 2n개의 링크 중, n-1개의 링크 = 다른 노드를 가리킨다 NULL 링크에 중위 선행자/후속자를 저장해 놓은 트리 = 스레드 이진 트리 스레드 이진 트리 - NULL 링크를 이용해서 순환호출 없이 트리의 노드들을 순회 가능 - 단말 노드 / 비단말 노드를 구분하기 위해 is_thread 필드 필요 - 노드의 right를 후속자를 가리키게 설정, is_thread = 1로 설정 typedef struct treenode { char data; struct treenode* left; struct treenode* right; int is_thread; // 1이면 ->right는 중위 ..
2021.12.14 -
[명품 Java] 7장 연습문제 (제네릭과 컬렉션)
[7장 1번] 컬렉션에 관한 설명으로 틀린 것은? 1. 가변 크기라서 배열보다 사용하기 편리하다. 2. 삽입 삭제 시 원소의 위치를 컬렉션이 자동 조절하므로 편하다. 3. 객체들만 삽입되므로 int와 같은 기본 타입의 값을 저장하는 방법이 없어 아쉽다. 4. 컬렉션은 모두 제네릭(generics)으로 만들어져 있다. - 3번, int와 같은 기본 타입의 값은 Wrapper 클래스를 이용해서 객체로 만들어서 저장하면 된다 [7장 2번] 다음 빈칸에 적절한 단어를 기입하라. 클래스, 인터페이스, 메소드를 특정 타입에 종속되지 않게 일반화 시켜 작성하는 기술을 제네릭이라 한다. Vector에서 E는 제네릭 타입 혹은 타입 매개변수라고 부 른다. E에 Integer 등과 같이 객체 타입을 지정하여 특정 타입의 ..
2021.12.13 -
[Java] 제네릭 만들기
제네릭 클래스 작성 - ex) 타입 매개변수 T를 가진 제네릭 클래스 Myclass - ex) 타입 매개변수 T를 가진 제네릭 클래스 stack (스택 자료구조) class Myclass{ T val; // 타입이 T인 변수 val void set(T val){ this.val = val; } T get(){ // 값 val를 타입 T로 return return val; } } class stack{ int top; // 스택의 top Object [] stack; // item을 저장할 stack 배열 public stack(){ top = -1; stack = new Object[10]; // 제네릭 매개변수로는 객체 생성, 배열 생성이 불가능 // 따라서 Object 배열을 생성해서 실제 타입 객체..
2021.12.13 -
[Data Structure] 이진 트리 : 수식 트리
수식 트리 - 산술 연산자(+, -, *, /), 피연산자로 구성 - 피연산자 = 단말노드 - 산술 연산자 = 비단말노드 - 각 루트노드들은 산술 연산자이기 때문에 루트보다 자식 노드(피연산자)들을 먼저 방문해야한다 그러므로 후위 순회를 사용 알고리즘 root에서부터 시작해서 해당 node가 NULL이면 그냥 return (종료) -- (1) 해당 node의 left, right가 모두 NULL이면 해당 node는 단말노드 = 피연산자 ∴ return 해당 node의 data -- (2) - (1), (2)에 해당이 안되면, 각 node의 left, right에서 (1), (2) 반복 Example) root(+) → evaluate(root->left) = '*' / evaluate(root->righ..
2021.12.13 -
[Data Structure] 이진 트리 반복적 순회/레벨 순회
반복적 순회 (중위 순회) - 스택을 이용해서 구현 스택에 자식 노드들을 push하고 pop하면서 순회 - 인공지능에서 지능적 탐색을 할 때 사용 알고리즘 root에서부터 root->left로 진행하면서 stack에 push ( root = root->left를 통해서 반복) -- (1) root->left가 NULL이 되면 stack에서 하나씩 pop pop한 노드를 방문해서 해당 노드에서 node->right로 이동 node->right가 NULL이면, 그냥 stack에서 pop node->right가 NULL이 아니면 node->right로 이동해서 (1) 진행 - stack이 공백이 되면 순회 종료 void inorder_iter(treenode* root) { // LVR 순으로 순회 while..
2021.12.13 -
[Data Structure] 이진 트리 연산 (노드, 높이)
노드의 개수 1. 트리안의 노드들을 전체적으로 순회 (함수 순환 호출) 2. 노드에 대한 각 서브트리들을 계속 순환 호출 (노드 != NULL) 3. 반환되는 값(왼쪽 서브트리, 오른쪽 서브트리 순회하면서 얻은 노드 개수)에 1을 더하기 더하기 1 : 자기 자신의 개수를 포함해야 하기 때문 int get_node_count(treenode* node) { int count = 0; if (node != NULL) count = 1 + get_node_count(node->left) + get_node_count(node->right); return count; } 단말 노드의 개수 1. 트리안의 노드들을 전체적으로 순회 (함수 순환 호출) 2. 순회하면서 해당 노드의 왼쪽자식 = 오른쪽자식 = NULL ..
2021.12.12