기록의 공유

잊지않기 위한 기록의 공유

전체 글 344

코데 대비5 - Deque(덱),동적프로그래밍

1. Deque란?Deque(Double Ended Queue, 덱)는 양쪽 끝에서 삽입/삭제가 모두 가능한 자료구조입니다. [앞] ← [요소1] [요소2] [요소3] → [뒤] ↕ ↕ 삽입/삭제 삽입/삭제 Stack처럼도 사용 가능 (LIFO)Queue처럼도 사용 가능 (FIFO)양방향 큐로도 사용 가능 Deque deque = new ArrayDeque(); 동적 배열 기반Stack, Queue보다 빠름null 저장 불가양쪽끝 연산이 O(1) deque.addFirst(1);deque.push(1); // 앞쪽 삽입deque.addLast(1);deque.offer(1); // 뒤쪽 삽입deque.peekFirst();dequ..

코데 대비4 - 정규표현식(문자열검증), 우선순위큐,n진법

문자열검사방법1. Character 클래스 사용2. Stream API 사용3. 정규표현식 사용 문자열에 숫자가 있는지 검사Character 클래스 사용public static boolean hasDigit(String str) { for (char c : str.toCharArray()) { if (Character.isDigit(c)) { return true; } } return false;}Stream API를 사용public static boolean hasDigit(String str) { return str.chars().anyMatch(Character::isDigit);}정규표현식 사용public static boolea..

코데 대비3 - 조합,소수구하기,Collection 요소 삭제시 주의점

조합(Combination)순서를 고려하지 않고 n개 중에서 r개를 뽑는 경우의 수 예시: [1, 2, 3]에서 2개 뽑기결과: [1,2], [1,3], [2,3] (총 3개)❌ [2,1]은 [1,2]와 같은 조합이므로 제외! 순열과의 차이순열: [1,2]와 [2,1]은 다름조합: [1,2]와 [2,1]은 같음public class prac { static int[] array = {1, 2, 3}; static int n = array.length; static int r = 2; static int[] result = new int[r]; public static void main(String[] args) { combination(0,0); } p..

코테 대비 2 - 약수구하기, Collection 최대값 구하기, 순열,백트래킹

약수 구하기약수를 구하는 기본적인 방법public List getDivisors(int number) { ArrayList list = new ArrayList(); // 1부터 해당 숫자까지 반복한다. for (int i = 1; i 기본적인 방법 말고 최적화된 방법을 써야한다.import java.util.*;public class Solution { public List getDivisors(int n) { List divisors = new ArrayList(); // Math.sqrt(n)를 따로 변수에 저장해서 쓰던가 하지않으면 매번 계산해야해서 느리다. i * i가 속도도 빠름 fo..

코테 대비 1 - List,Map,Comparator,Stream API

List 관련 지식 + Stream API + Comparator + Comparable불변,가변 ListList integerList = List.of(1, 2, 3, 4, 5); // List.of()는 읽기만 가능하고 요소 추가,수정,삭제 불가List integerList2 = Arrays.asList(1, 2, 3, 4, 5); // Arrays.asList()는 읽기와 요소 수정 가능, 추가 삭제 불가하다.List goodIntegerList = new ArrayList(); // new ArrayList()로 생성된 리스트는 읽기와 요소의 수정,삭제,추가 전부 가능하다./** * Collection의 요소는 객체여야한다. * int[] 또한 하나의 배열 객체이다. int[]라는 참조타입변수에는..

가변 Collection , 불변 Collection

자바에서 리스트를 만들때 여러가지 방법을 사용할 수 있다.List.of()Arrays.asList()new ArrayList()하지만 각각의 차이를 모르고 쓰다가는 UnsupportedOperationException를 만나게 될것이다. 이번에 각각의 차이를 정리해보자. List List.of() - 완전 불변 리스트 (Java 9+) List.of()는 완전히 수정 불가능한 불변 리스트를 만든다.List fruits = List.of("apple", "banana", "orange");fruits.add("grape"); // UnsupportedOperationExceptionfruits.remove(0); // UnsupportedOperationException ..

Backend/Java 2025.12.09

소프트파싱,하드파싱,데이터베이스 저장구조,Index Range Scan,Table Full Scan

소프트파싱 vs. 하드파싱- SQL 파싱(SQL문을 컴퓨터가 이해할수있도록 바꾸는 DB 내부 작업 )- 최적화(Optimize = SQL를 실행할때 가장 적은 비용이 소모되도록 실행계획을 생성 및 선택하는 과정)- 로우 소스 생성 과정을 거쳐 내부 프로시저가 생성된다. ( 옵티마이저와 로우 소스 생성기가 만든다.) (사용자가 직접만드는 stored procedure랑 다른것이다.) 이렇게 생성된 내부 프로시저는 반복 재사용할 수 있도록 라이브러리 캐시라는곳에 저장된다.사용자가 SQL문을 전달하면 DBMS는 SQL를 파싱한후 해당 SQL이 라이브러리 캐시에 존재하는지 확인한다. 찾으면 바로 실행단계로 넘어가지만 찾지못하면 최적화 단계를 거친다. SQL을 캐시에서 찾아 곧바로 실행단계로 넘어가는 것을 ‘소프..

Stream ( with claude )

Stream은 컬렉션, 배열 등의 데이터를 함수형으로 처리하는 API입니다 (Java 8+) Stream 생성 방법// 컬렉션에서List list = Arrays.asList("a", "b", "c");Stream stream = list.stream();// 배열에서String[] arr = {"a", "b", "c"};Stream stream = Arrays.stream(arr);// 직접 생성Stream stream = Stream.of("a", "b", "c");// 범위 생성IntStream range = IntStream.range(1, 5); // 1,2,3,4IntStream rangeClosed = IntStream.rangeClosed(1, 5); // 1,2,3,4,5 배열..

Backend/Java 2025.09.30

자바 정렬 ( with claude )

1. Comparable vs Comparator 언제 뭘 쓸까?Comparable 사용:학생을 학번순으로 정렬하는 것처럼, 객체의 "자연스러운" 기본 정렬 방식이 있을 때한 가지 정렬 방식만 필요할 때클래스를 직접 수정할 수 있을 때Comparator 사용:나이순, 이름순, 점수순 등 여러 가지 정렬 방식이 필요할 때String, Integer 같은 기존 클래스를 다르게 정렬하고 싶을 때클래스를 수정할 수 없을 때 2. Comparable 상세 설명 Comparable 구현하기class Student implements Comparable { String name; int age; public Student(String name, int age) { this.n..

Backend/Java 2025.09.28

2) 자바 어플리케이션을 코틀린으로 리팩토링(2)

Optional 처리 , findById 처리, 반복되는 로직 처리  코틀린에서는 ?를 이용하여 해당 타입의 nullable 여부를 정하니까 interface BookRepository : JpaRepository { fun findByName(bookName: String): Book?}반환값을 Optional이 아닌 Book?으로 해서 nullable하다는걸 정의할 수있다. @Transactionalfun returnBook(request: BookReturnRequest) { val user = userRepository.findByName(request.userName) ?: throw IllegalArgumentException() user.returnBook(request.bo..