본문 바로가기

전체 글

[Java] Lv_1 도서관 프로젝트 요구 사항⬜ 도서 1권의 정보를 출력할 수 있어야 한다.⬜ 도서 정보는 제목, 저자, 출판 연도이다. 문제 풀이Main더보기package lv_1;public class Main { public static void main(String[] args) { Book book = new Book("어린왕자", "앙투안 드 생텍쥐페리", 1943); System.out.println(book); }}생성자를 통해 책의 정보를 넘겨주면서 Book 객체 생성book 정보를 출력 (객체를 print로 출력해도 값이 정상 출력되는 이유는 아래에서 설명) Book더보기package lv_1;public class Book { private String title; .. 더보기
[정렬] 선택 정렬 목차선택 정렬선택 정렬 특징선택 정렬 수행 방식핵심 이론 선택 정렬배열에서 최대나 최소 데이터 요소를 선택해 나열된 순으로 하나씩 정렬해나가는 방식입니다. 선택 정렬 특징시간 복잡도는 O(n²)으로 다른 정렬 알고리즘보다 속도가 느린편이다.Loop를 돌면서, 정렬되지 않은 부분에서 최소값(또는 최대값)을 찾아서 swap 연산으로 정렬합니다. 선택 정렬 수행 방식남은 정렬 부분에서 최솟값 또는 최댓값을 찾는다. (내림차순, 오름차순에 따라 다르다.)정렬해야 하는 수의 갯수 : `n개` (n의 시간 복잡도)하나를 정렬하는 데, 필요한 횟수 : 평균적으로 `1/2×n번` (n의 시간 복잡도, 상수는 무시된다.)루프 첫 번째 : n 만큼 탐색루프 두 번째 : n - 1 만큼 탐색 .....루.. 더보기
[정렬] 버블 정렬 목차버블 정렬버블정렬 특징버블정렬 수행 방식핵심 이론 버블 정렬인접한 데이터의 크기를 비교해서 순서가 잘못된 경우 서로 교환하는 방법입니다. 버블정렬 특징시간 복잡도는 O(n²)으로 다른 정렬 알고리즘보다 속도가 느린 편입니다.Loop를 돌면서 인접한 데이터 간의 swap 연산으로 정렬합니다. 버블정렬 수행 방식루프 한 번 : n의 시간 복잡도n번 만큼 루프를 돈다 : N의 시간 복잡도따라서 `n × n` 이므로 총 시간 복잡도는 `n²`이다. 핵심 이론한 번의 루프마다 배열의 끝으로 가장 큰 값이 이동한다.정렬 과정은 최대 n-1번의 패스로 이루어진다. (n은 배열 크기)반복문 중 교환(SWAP)이 한 번도 일어나지 않으면, 정렬 완료로 간주하고 종료할 수 있다. (최적화 가능)p.. 더보기
[자료 구조] Stack과 Queue 목차StackQueueStack vs Queue확장 구조 Stack후입선출 (LIFO: Last In, First Out) 방식의 자료구조입니다. 즉, 가장 나중에 들어온 데이터가 가장 먼저 나가는 구조입니다. 1. Stack 구조0번부터 넣은 후, 4번을 가장 마지막에 넣은 상태입니다.Top : 가장 위에 있는 데이터 위Bottom : 가장 아래에 있는 데이터 위치PUSH : 데이터를 넣는 행위POP : 데이터를 빼는 행위 2. Stack 특징한 쪽 끝에서만 데이터 삽입과 삭제가 일어납니다.재귀 호출, 되돌리기(Undo) 기능 등에 적합합니다.3. 사용 예시웹 브라우저의 뒤로 가기(Back) 기능재귀 함수의 호출 스택수식 계산 (후위 표기법 등)자바 JVM Stack 메모리DFS (깊이 우선 .. 더보기
[자료구조] 동적 배열(Dynamic Array)과 연결 리스트(Linked List) 차이 동적 배열 (Dynamic Array)데이터를 순차적으로 저장하고, 크기를 동적으로 조절 할 수 있는 배열 자료 구조이다. 일반적인 배열은 선언 시 크기가 고정되지만, 동적 배열은 데이터의 삽입/삭제에 따라 자동으로 크기를 확장하거나 축소할 수 있습니다. 1. 동적 배열의 구조변수 : 실제 메모리 공간의 주소를 담고 있는 변수입니다.크기(Size) : 현재 배열에 저장된 요소의 개수입니다.용량(Capacity) : 배열이 재할당 없이 저장할 수 있는 최대 요소 수입니다. 2. 동적 배열의 특징일반 배열을 감싼 객체 형태(클래스)로 구현되어 있으며, 동적으로 사용할 수 있게 해주는 내부 로직들이 존재한다.배열 크기가 고정되어있지 않고 필요에 따라 자동(내부로직)으로 증가(또는 감소) 합니다.보통 요소 .. 더보기
[알고리즘] 구간 합 구간 합특정 구간의 합을 빠르게 계산하기 위한 알고리즘이다. 대표적으로 누적합 (Prefix Sum)을 이용하는 방식입니다. 1. 누적합(Prefix Sum)배열 A가 주어졌을 때, `A[i]부터 A[j]`까지의 합을 자주 구해야 한다면, 누적합 배열 S를 먼저 구해놓고 이를 이용해 빠르게 구간합을 계산할 수 있습니다.S[i] = A[0] + A[1] + ... + A[i-1] (1 ≤ i S[0]은 아무것도 더해지지 않은 상태이다. 즉, 0이다. (이렇게 하는 이유는 헷갈림을 방지하기 위해서이다.) 2. 구간 합 구하기`A[i]부터 A[j]`까지의 구간 합은 다음과 같이 누적합을 이용하여, 계산할 수 있습니다.i부터 j까지의 구간 합 = S[j+1] - S[i] 예시 : 0부터 2까지의 구간 합 (.. 더보기
[자료구조] 배열과 동적 배열 : 차이점과 선택 기준 배열 (Array)메모리에 연속적으로 데이터를 저장하는 자료구조이다. 1. 배열의 구조 2. 배열의 특징모든 원소의 크기가 같아야 한다. (ex. int형 배열이면 모든 원소가 int여야 한다.)인덱스(index)로 각 원소에 바로 접근할 수 있어 매우 빠르다. (O(1) 시간)크기가 한 번 정해지면, 다시 바꾸기 어렵다. (배열의 한계)배열의 처음이나 끝에서 삽입/삭제를 하는 경우, 관련된 값들을 다 한칸 씩 옆으로 밀어주거나 당겨줘야 한다.직접 구현해야 한다. 3. 배열의 인덱스배열의 인덱스는 다음과 같이 계산이 된다.arr[0] : X001 + (4Byte * 0) : X001arr[1] : X001 + (4Byte * 1) : X005arr[2] : X001 + (4Byte * 2) : X0.. 더보기
[Java] 도전 과제 Lv_2 키오스크 요구사항⬜ Enum을 활용한 사용자 유형별 할인율 관리하기⬜ 사용자 유형의 Enum 정의 및 각 사용자 유형에 따른 할인율 적용⬜ 예시 : 군인, 학생, 일반인⬜ 주문 시, 사용자 유형에 맞는 할인율 적용해 총 금액 계산 ⬜ 람다 & 스트림을 활용한 장바구니 조회 기능⬜ 기존에 생성한 Menu의 MenuItem을 조회 할 때 스트림을 사용하여 출력하도록 수정⬜ 기존 장바구니에서 특정 메뉴 빼기 기능을 통한 스트림 활용⬜ 예시 : 장바구니에 SmokeShack 가 들어 있다면, stream.filter를 활용하여 특정 메뉴 이름을 가진 메뉴 장바구니에서 제거 문제 풀이앞서 설명한 내용은 생략하겠습니다. Main더보기public class Main { public static void main(.. 더보기