본문 바로가기

전체 글130

7주차, 제네릭 사용 예 보호되어 있는 글 입니다. 2022. 2. 5.
7주차, 제네릭 개요, 클래스, 메소드 사용법 1. 개요 정적언어(C, C++, Java 등등)을 다루다보면 제네릭이란 용어를 자주 접하게 된다. 사전적 의미론 '일반적인' 이라는 뜻이지만 이것만 보면 뭔 말인지 이해하기 힘들다. 부연설명을 하자면 '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법' 이다. ArrayList, LinkedList 등을 생성할 때, [객체] [객체명] = new [객체](); 의 형태로 원하는 자료형을 넣고 생성한다. 자료형마다 클래스를 만드는 방법도 있지만, 지나치게 비효율적이다. 이때, 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 특정(Specific)타입을 미리 지정하는 것이 아닌, 필요에 의해 지정할 .. 2022. 2. 5.
7주차, 자료구조 배열 리스트 (ArrayList) list ・ 선형적인 자료구조 ・ 데이터를 일렬로 늘여놓은 형태 ・ 순서 list의 연산 ・ 데이터 삽입 ・ 데이터 삭제 ・ 데이터 탐색 list의 종류 ・ ArrayList ・ LinkedList ・ Single Linked List ・ Double Linked List ArrayList는 자바에서 이미 구현되어 있다. ・ 배열 기반 리스트 ・ 메모리 공간을 연속적으로 사용 List 변수 이름 = new ArrayList(); list.add(??); 로 추가가 가능하다. list.remove(??); 로 삭제가 가능하다. list.get(인덱스) 로 인덱스 번호로 데이터를 받을 수 있다. 만약 데이터를 추가할 경우, 원하는 위치에 집어넣는 대신, 그 뒤에 있는 데이터는 다 밀려나게 된다. 뒤에 있는 .. 2022. 2. 4.
7주차, 시간복잡도 O(1) ・ 입력 데이터의 크기와 상관없이 항상 일정한 시간이 걸리는 알고리즘 ・ 배열의 Random Access ・ Hash O(N) ・ 입력 데이터의 크기에 비례해서 시간이 소요되는 알고리즘 for (int i = 0; i < N; i++){ // for 가 O(N)의 시간복잡도를 가진다. } O(N^2) ・ 입력 데이터의 제곱에 비례해서 시간이 소요되는 알고리즘 for (int i = 0; i < N; i++){ for (int i = 0; i < N; i++){ // 중첩 for문은 O(N^2)의 시간복잡도를 가진다. } } O(logN) ・ 이진탐색(Binary search) // 가장 효율적인 up down과 같음, 한 번 연산할 때마다 연산범위가 반으로 ・ n, n/2, n/4, ... , .. 2022. 2. 2.