목록2024/10 (8)
dew's CSE Studying
9.1 우선순위 큐 추상 데이터 타입우선순위 큐의 소개우선순위 큐의 사용: 시뮬레이션 시스템, 네트워크 트래픽 제어, 운영체제에서의 작업 스케쥴링, 수치 해석적인 계산 등우선순위 큐는 배열, 연결리스트 등 여러 가지 방법으로 구현이 가능한데 우리는 가장 효율적인 히프(heap)로 구현~ 최소 우선순위 큐: 가장 우선순위가 낮은 요소를 먼저 삭제최대 우선순위 큐: 가장 우선순위가 높은 요소를 먼저 삭제 9.2 우선순위 큐의 구현방법배열을 사용하는 방법정렬X배열삽입 O(1) : 그냥 배열 맨 끝에 요소 추가삭제 O(n): 가장 우선순위가 높은 요소를 찾아야 한다. 정렬이 안 되어있으므로 처음부터 끝까지 다 스캔해야 한다 정렬O배열삽입 O(n): 삽입위치를 찾고->이동 시켜서 빈자리 만들고->삽입해야함삭제 O..
8.1 트리의 개념-계층적 자료구조트리의 용어들트리는 한 개 이상의 노드로 이루어진 유한집합이다. 루트-서브트리에서 서브트리는 또다시 루트-서브트리로 나눠질 수 있다.조상노드(ancestor node): 루트 노드에서 임의의 노드까지의 경로를 이루고 있는 노드를후손노드(descendent node): 임의의 노드 하위에 연결된 모든 노드들을 의미한다단말노드(terminal node, leaf node): 자식노드가 없는 노드(차수=0)비단말노드(nonterminal node): 자식노드가 있는 노드 노드의 차수(degree): 어떤 노드가 가지고 있는 자식노드의 개수트리의 차수: 트리가 가지고 있는 노드의 차수 중에서 가장 큰 값레벨(level): 트리의 각 층에 번호를 매기는 것. 루트노드가 1층이다높..
7.1 원형 연결 리스트원형 연결리스트의 소개원형 연결 리스트 : 마지막 노드가 첫 번째 노드를 가리키는 리스트(원래는 NULL이었는데!) 장점: 하나의 노드에서 다른 모든 노드로의 접근이 가능하다(링크만 따라서 쭉쭉 가면 되니까!) = 삽입/삭제가 단순연결리스트보다 용이하다특히 insert_last가 매우 효율적이다. 단순연결리스트에서는 첫 번째 노드부터 쭉쭉 링크 따라서 가야지만 마지막 노드에 도달할 수 있었는데 원형 연결 리스트에서는 head포인터가 마지막을 가리키도록 해주기만 하면 된다. 원형 연결리스트의 정의원칙적으로 헤드포인트만 있으면 된다ListNode *head; insert_first()헤드포인터 head가 마지막 노트를 가리키고 있다는 것에 유의해야한다 insert_last()위 코드에..
6.1 리스트 추상 데이터 타입리스트의 소개L=(item0, item1, ... , item(n-1))리스트는 순서와 위치를 가진다는 점에서 집합과는 다른 개념이다항목, 삭제, 탐색을 해보자그냥 일상적으로 작성하는 투두리스트 같은 거다! 리스트 ADT-객체: n개의 element형으로 구성된 순서 있는 모임-연산: insert(list, pos, item) ::= pos 위치에 item을 추가한다 insert_last(list, item) ::= 맨 끝에 item을 추가한다 insert_first(list, item) ::= 맨 처음에 item을 추가한다 delete(list, pos) ::= pos 위치의 요소를 제거한다 clear(list) ::= 리스트의 모든 요소를 제거..
5.1 큐 추상 데이터 타입큐(queue): 먼저 들어온 애가 먼저 나가는 선입선출(FIFO:First In First Out)구조의 자료구조마트에서 줄 서는 거를 생각하자!!계속 쌓이는 스택의 경우 데이터의 추가와 삭제가 같은 쪽에서 일어났지만 큐는 전단(front)에서 삭제가, 후단(rear)에서 삽입이 일어난다! 큐의 ADT:-객체: 0개 이상의 요소들로 구성된 선형 리스트-연산: create(max_size) ::= 최대 크기가 max_size인 공백큐를 생성 init(q) ::= 큐를 초기화 is_empty(q) ::= if(size==0) return TRUE; else return FALSE; is_full(q) ::= ..
The Tower of Hanoi [조건]한 번에 하나의 원판만 이동 가능맨 위에 있는 원판만 이동 가능크기가 작은 원판 위에 큰 원판을 쌓는 것 불가능중간의 막대를 임시적으로 이용할 수 있으나 앞의 조건들을 지켜야 함 [코드]#include void hanoi_tower(int n, char from, char tmp, char to){ if(n==1) printf("원판 1을 %c에서 %c으로 옮긴다. \n", from, to); else { hanoi_tower(n-1, from, to, tmp); printf("원판 %d을 %c에서 %c으로 옮긴다. \n", n, from, to); hanoi_tower(n-1, tmp, from, to); }..
섹션7 스프링 DB 접근 기술 1.H2 데이터베이스 설치설치 완료~ 2.순수 JDBC이렇게 설정해두면 스프링이 DB연결을 위한 작업을 다 알아서 해준다이 파트는 옛날 개발에서는 직접 구현했지만 요즘은 잘 사용하지 않으므로 그냥 보면서 넘기기로 한다!*개방-폐쇄 원칙(OCP, Open-Closed Principle): 확장에는 열려있고 수정, 변경에는 닫혀있다우리가 JdbcMemberRepository를 생성했지만 다른 코드는 전혀 건들지 않았던 것처럼 스프링의 DI(Dependency Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다 3.스프링 통합 테스트@Transactional: 트랜잭션을 먼저 실행->두 개의 데이터를 INSERT->ROLL@S..
섹션4 회원관리 예제 - 백엔드 개발1.비즈니스 요구사항 정리데이터: 회원ID, 이름기능: 회원등록, 조회-컨트롤러: 웹 MVC의 컨트롤러 역할-서비스: 핵심 비즈니스 로직 구현(ex 회원은 중복가입 불가)-도메인: 비즈니스 도메인 개체(ex 회원, 주문, 쿠폰,... 주로 db에 저장/관리)-리포지토리: db에 접근, 도메인 개체를 db에 저장/관리 2.회원 도메인과 리포지토리 만들기회원 도메인package hello.hello_spring.domain;public class Member { private Long id; //id식별자(for system) private String name; //이름이 있다 public Long getId() { return id; ..