분류 전체보기 116

삽입 정렬

삽입 정렬 두 번째 인덱스부터 시작 해당 인덱스 (key 값) 앞에 있는 데이터 (B)부터 비교해서 값이 작으면, B 값을 뒤 인덱스로 복사 key 값이 더 큰 데이터를 만날때까지 반복, 그리고 큰 데이터를 만난 위치 바로 뒤에 key 값을 이동 데이터가 두 개일 때 삽입 정렬 import java.util.*; ArrayList list = new ArrayList(); list.add(5); list.add(2); if(list.get(1) < list.get(0)) { Collections.swap(list, 1, 0); } System.out.println(list); // [2, 5] 데이터가 세 개일 때 삽입 정렬 import java.util.*; ArrayList list = new Arr..

코테/알고리즘 2023.08.29

선택 정렬

선택 정렬 주어진 데이터 중 최소값을 찾음 해당 최소값을 맨 앞과 교체 맨 앞을 제외한 나머지 데이터를 동일 한 방법으로 교체 데이터가 두 개일 때 선택 정렬 import java.util.*; ArrayList list = new ArrayList(); list.add(8); list.add(2); if(list.get(0) > list.get(1)) { Collections.swap(list, 0, 1); } System.out.println(list); // [2, 8] 데이터가 세 개일 때 선택 정렬 import java.util.*; ArrayList list = new ArrayList(); list.add(10); list.add(2); list.add(8); // 작은 데이터 int min..

코테/알고리즘 2023.08.29

버블 정렬

버블 정렬 인접한 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘 데이터가 두 개일 때 버블 정렬 import java.util*; ArrayList list = new ArrayList(); list.add(5); list.add(3); if(list.get(0) > list.get(1)) { Collections.swap(list, 0, 1); } System.out.println(list); // [3, 5] 데이터가 세 개일 때 버블 정렬 import java.util.*; ArrayList list = new ArrayList(); list.add(10); list.add(3); list.add(5); for(int i = 0; i < list.si..

코테/알고리즘 2023.08.29

자동 구성 (Auto Configuration) - 2

@Contitional 특정 상황일 때만 특정 빈들을 등록해서 사용하도록 도와주는 기능 스프링 부트 자동 구성에서 자주 사용됨 matches() 메서드 : true ➡️ 동작 o / false ➡️ 동작 x ConditionContext : 스프링 컨테이너, 환경 정보 AnnotatedTypeMetadata : 어노테이션 메타 정보 Condition 인터페이스를 구현해 자바시스템 속성이 'memory=on' 이라고 되어 있을때 메모리기능이 동작 하도록 구현 MemoryCondition "on" 일 경우 true 반환 MemoryConfig @Conditional 어노테이션 추가 (MemoryCondition.class 부터 먼저 체크함) 인텔리제이 VM 속성 설정 -Dmemory=on / -D 꼭 붙여줘..

공간 복잡도

알고리즘 계산 복잡도는 두가지로 나뉘어짐 시간 복잡도 공간 복잡도 둘다 만족시키기는 어려움 시간과 공간은 반비례적 경향 대용량 시스템 보편화로 시간 복잡도가 우선 공간 복잡도 프로그램 실행/완료 시 필요한 저장 공간 총 필요 저장 공간 고정 공간 (알고리즘과 무관한 공간) : 코드 저장 공간, 단순 변수 및 상수 가변 공간 (알고리즘 실행과 관련있는 공간) : 실행 중 동적으로 필요한 공간 𝑆(𝑃)=𝑐+𝑆𝑝(𝑛) / c: 고정 공간, 𝑆𝑝(𝑛) : 가변 공간 공간 복잡도는 가변 공간에 좌우됨 공간 복잡도 계산 공간 복잡도 계산은 알고리즘에서 실제 사용되는 저장 공간을 계산하면 됨 예제 1 n! 구하기 n! = 1 * 2 * 3 * ... * n 공간 복잡도는 O(n) / 실행시 사용되는 저장공간을 계산하..

코테/알고리즘 2023.08.23

힙 (Heap)

힙 (Heap) 힙 (Heap) : 최대값과 최소값을 바르게 찾기 위해 고안된 완전 이진 트리 (Complete Binary Tree) 힙 (Heap) 사용 이유 배열로 최소/최대를 찾으려면 O(n) 으로 걸림 힙 (Heap) 으로 최소/최대를 찾으면 O(logn) 으로 걸림 우선순위 큐와 같이 최소/최대값을 빠르게 찾아야하는 자료구조 및 알고리즘 구현에 활용됨 구조 최소값을 구하는 힙 (최소 힙, Min Heap) 과 최대값을 구하는 힙 (최대 힙, Max Heap) 으로 분류 힙은 아래 조건을 가지고 있는 자료구조 최대 힙 경우 각 노드의 값이 자식 노드가 가진 값보다 크거나 같음 최소 힙 경우 각 노드의 값이 자식 노드가 가진 값보다 크거나 작음 완전 이진 트리 형태 힙 데이터 삽입 - 기본 힙은 ..

코테/자료구조 2023.08.23

자동 구성 (Auto Configuration) - 1

자동 구성 (Auto Configuration) 자동 구성 예제 Member 를 만들고 Jdbc를 연결해 들어간 데이터가 맞는지 테스트 예정 Member 클래스 생성 DbConfig 클래스 생성 JdbcTemplate 을 사용해 회원 데이터를 DB에 보관하고 관리하는 기능 각 기능들을 스프링 빈으로 직접 등록 외부 DB 가 아닌 JVM 내부에서 동작하는 메모리 DB 사용 (H2) Repository 생성 Test 코드 @Transactional 어노테이션을 사용해 트랜잭션 기능 적용 TransactionManager 가 스프링 빈으로 등록되어 있어야 함 테이블 생성, 회원 저장, 조회 후 검증 JdbcTemplate , DataSource , TransactionManager 모두 사용했지만 스프링 빈으..

운영체제

⁉️ OS (운영체제)란? 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어입니다. ⁉️ 커널이란? 커널은 운영체제에서 핵심이 되는 부분으로 컴퓨터의 하드웨어들을 관리하는 역할을 합니다. 이 커널은 user와 대화를 할 수 없으며, 컴퓨터의 관련된 일만 할수있습니다. 그래서 user와 대화하기 위해서는 쉘(shell)을 사용합니다. ⁉️ 메모리의 구조를 영역에 따라 설명 프로세스의 주소 공간은 코드 (code), 데이터 (data), 스택 (stack), 힙 (heap) 영역으로 구성됩니다. 코드 (code, text) 영역 : 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간입니다. 데이터 (dat..

트리와 이진 탐색 트리 - 2

트리와 이진 탐색 트리 - 2 이진 탐색 트리 삭제 삭제는 많이 복잡하지만 로직만 잘 세우면 단순한 것 같음 Leaf Node 삭제 (제일 마지막 노드 삭제) Child Node 가 하나인 Node (중간 노드 삭제) Child Node 가 두개인 Node (중간 노드 삭제) 삭제할 Node 찾기 public boolean delete(int value) { boolean search = false; Node curParentNode = this.head; Node curNode = this.head; // Node 가 하나도 없을 경우 if(this.head == null) { return false; // Node 가 하나만 있고 해당 Node 를 삭제 할 경우 } else { if(this.head..

코테/자료구조 2023.08.18

스프링 부트 스타터와 라이브러리 관리

스프링 부트 스타터와 라이브러리 관리 라이브러리 관리의 어려움 프로젝트를 시작하면 어떤 라이브러리를 사용할 지 고민하고 선택함 각 라이브러리들끼리 호환이 잘되는지 안되는지 알아야해 버전까지 고민해야 함 프로젝트 세팅 시간 ⬆️ 라이브러리 직접 관리 문제점 수 많은 라이브러리를 알아야하고, 버전까지 골라서 선택해야함 호환이 잘 안되는 버전도 있음 스프링 부트 라이브러리 버전 관리 스프링 부트가 라이브러리의 버전을 직접 관리해주고, 원하는 라이브러리만 고르고 버전은 생략해도 됨 스프링 부트가 최적화된 라이브러리 버전을 선택해줌 버전 관리 기능을 사용하려면 io.spring.dependency-management 플러그인을 사용해야 함 dependency-management 버전관리 io.spring.depe..