그래프 그래프는 아이템들과 이들 사이의 연결 관계를 표현한 자료구조로 M:N 관계 표현 시 많이 사용된다. 정점 : 그래프의 데이터가 담긴 부분 간선 : 정점간의 연결관계 인접하다는 것은 정점과 정점을 연결하는 간선이 존재한다는 것을 의미한다. 차수 : 한 정점을 기준으로 정점에 연결된 간선의 개수 정점을 통해 연결되는 간선들을 순서대로 나열한 것을 경로라고 함. 그래프 종류 무향 그래프 양쪽 정점에서 간선을 통해 서로에게 도달 가능한 그래프. 유향 그래프 한 정점에서 다른 정점으로는 도달 가능하지만 반대는 불가능한 그래프 가중치 그래프 간선에 값이 추가된 형태로 해당 간선을 택할 때 비용을 표현하는 경우 사용한다. 순환 그래프 시작한 정점에서 끝나는 경로를 사이클이라고 할 때 이런 순환 구조를 가진 그..
전체 글
개발 공부하는 블로그LinkedList 연결 리스트는 여러 자료를 저장하기 위한 자료구조의 일종으로 자료를 저장할 때 다음 자료의 위치를 같이 저장한다. 가장 기본적인 연결 리스트는 데이터를 저장하기 위한 노드들과 첫번째 노드를 가리키기 위한 필드로 이뤄져 있다. 노드는 데이터를 저장하는 데이터 필드와, 다음 노드의 위치를 저장하기 위한 링크 필드를 갖고 있다. private static class Node { private int data;// 자료 저장 private Node link;// 다음 자료의 위치 저장 } add public void add(int data) { // 1. start == null (LinkedList가 비어있을 때) if (start == null) start = new Node(data);..
Queue 큐는 대기열이라는 의미를 갖고 있음. 스택과는 다르게 선입선출 자료구조이다. 가장 먼저 추가된 자료가 먼저 나옴. FIFO 스택은 입출력이 한 방향이었기 떄문에 top 변수를 사용해야 했음. but queue는 입출력이 다른 곳에서 이뤄지기 때문에 데이터의 첫부분과 끝부분을 가리키는 변수가 필요. 앞부분을 가리키는 front와 끝부분을 가리키는 rear를 사용. deQueue할 땐 front 하나 증가. enQueue할 땐 rear 하나 증가 isEmpty() ⇒ front == rear일 경우 queue의 문제점! 앞부분의 공간이 비었지만 front와 rear가 계속 뒤로 이동하며 queue가 꽉찼다고 인식하게 됨! ⇒ 잘못된 포화 상태 인식이라고 함. 그래서 원형 큐를 사용하는 방안을 도입..
코드 GitHub - yezyaa/happy-jpa Contribute to yezyaa/happy-jpa development by creating an account on GitHub. github.com JPA create, readAll까지 복습. 결과
Spring Streotypes org.sprinframework.stereotype 패키지에는 Bean 객체로 등록하기 위한 다양한 annotation이 존재한다. @Controller, @Service, @Repository, @Componenet 등등.. 표기된 어노테이션을 보고 해당 클래스가 프로젝트에서 어떤 역할을 맡고 있는지 판단할 수 있고 각 클래스가 담당하는 역할을 개념적으로 구분할 수 있다. Streotypes의 주된 목적은 구현적 의미보다는 개념적인 의미의 역할 구분이다. @Component 서비스의 주된 흐름에서 속하지 않는 애들한테 붙여준다. Controller, Service, Repository가 아닌 평범한 Bean 객체 표현 시 사용.. 가장 기초가 되는 어노테이션으로 @Co..
후위표기법 postfix 후위표기법이란 연산자를 피연산자 두개의 뒤쪽에 표기해 수식을 표현하는 방식이다. 숫자를 앞에 기호를 뒤에 표기한다. 연산자를 만났을 때 직전 두개의 숫자를 가지고 계산하면 된다. 1. 숫자 만나면 스택에 push. 2. 연산자 만나면 pop 두번한 결과 가지고 계산. (이 때 먼저 pop된 숫자가 오른쪽 피연산자) 3. 계산 결과를 다시 스택에 push. ex) 5 + 3 * 1 일 경우 --> 5 3 1 * + --> 5 (3 1 *) + --> 5 3 + => 8 public void solution() throws IOException { // 입력 처리 BufferedReader reader = new BufferedReader(new InputStreamReader(Sy..
Stack 스택은 물건을 쌓아올린 형태의 자료구조이다. 마지막에 추가된 자료가 먼저 나오는 후입선출 자료구조이다. => LIFO (Last In First Out) 스택의 기본 기능 - 데이터 추가 (push) - 데이터 회수 (pop) - 스택이 비어있는지 확인 (isEmpty) - 제일 위의 데이터 확인 (peek) Call Stack stack 자료구조를 활용해 프로그래밍 언어의 함수 호출 및 복귀 순서를 관리한다. 함수 또는 메소드 호출 시 마지막 수행 위치를 Stack에 저장한다. 스택 내부에 함수 실행을 위해 필요한 데이터와, 함수 호출 시 마지막 수행 위치 등을 저장한다. 재귀적 함수 호출로 인해 Call Stack의 최상단이 JVM의 Heap에 도달하게 되면 StackOverflow가 발생..
@PathVariable 경로상의 변수를 매개변수에 할당할 때 사용하는 어노테이션 @GetMappin("/{id}") public String readOne(@PathVariable("id") Long id, Model model) { ... } 경로 : http://localhost:8080/1 => id = 1 경로 : http://localhost:8080/25 => id = 25 th: 일반적인 HTML 요소의 속성에 'th:' 를 추가해주면 해당 속성은 Thymeleaf가 동적으로 할당한다. ex) th:class, th:action, th:href @{} @{/{변수} (변수=변수값)} 동적 경로를 표현하는 방법을 제공하기 위한 Thymeelaf 문법이다. 타임리프가 url 관련된 값을 사용 ..
Counting Sort Counting Sort란 각 자료가 몇 개 존재하는 지를 정리한 뒤 그 정보를 활용해 정렬하는 방식이다. 예를 들어 숫자가 적힌 카드가 1이 2개, 2가 3개, 3이 1개 있다고 하면 1, 1, 2, 2, 2, 3 와 같이 정렬하는 방식이다. 1. 먼저 자료들 값의 범위만큼 공간을 가진 배열을 만든다. 만약 자료들 값이 0~5까지 있다면 크기가 6인 배열(counts)을 만든다. int[] arr = {0, 1, 4, 4, 3, 0, 5, 2, 5, 1}; //(최대값과 최소값을 안다는 가정 하에) int max = 5; int min = 0; int[] counts = new int[max - min + 1]; 2. arr 배열을 돌면서 각 자료의 데이터(data)를 확인하고..
Build Automation Tool 인간이 이해할 수 있는 언어인 high level language 에서 기계가 이해할 수 있는 언어인 low level language로 변환하는 과정을 컴파일이라고 한다. 그리고 여러 코드, 리소스, 외부 라이브러리 파일들은 사용자들이 쓸 수 있는 일종의 실행 파일 형태로 전달이 되어야 하는데 프로젝트 소스코드를 실행 가능한 형태로 만드는 과정을 빌드라고 한다. 이렇게 프로젝트를 하기 위해선 컴파일 이상의 많은 작업이 필요하다. 그래서 Build Automation Tool이라는 도구가 있는데 대표적으로 Gradle과 Maven이 이에 해당한다. 얘네는 Java 프로젝트를 빌드하는데 사용되는 대표적인 도구로 소스파일 컴파일, 단위 테스트, 버전관리, Jar 생성 ..