이진 탐색 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 - 탐색 범위를 반으로 좁혀가면서 탐색 - 이진 탐색을 하기 위한 전제 조건(precondition) : 탐색을 실시하기전에 오름차순 정렬이 되어있어야 한다. 동작 예시 0) 오름차순 정렬된 데이터 중에서 값이 4인 원소를 찾아보자. 1) 시작점 0, 끝점 9, 중간점 (9 / 2 = 4) 2) 중간점보다 4가 작으므로 시작점 0, 끝점 3, 중간점 1 3) 중간점보다 4가 크므로 시작점 2, 끝점 3, 중간점 2 예제코드 import java.util.Scanner; public class M14_이진탐색 { public static void main(String[] args) { Scanner sc = new Sc..
Read more들어가기전, 큐 https://devfunny.tistory.com/710 큐 (Queue) 큐 - 선입선출 : 먼저 들어 온 데이터가 먼저 나가는 형식 예제코드 import java.util.LinkedList; import java.util.Queue; /** * Queue */ public class M2_Queue { public static void main(String[] args) {.. devfunny.tistory.com BFS - 너비 우선 탐색 - 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다. - 큐 자료구조를 이용한다. [수행 과정] 1) 탐색 시작 노드를 큐에 삽입하고 방문 처리를 합니다 2) 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드..
Read more큐 - 선입선출 : 먼저 들어 온 데이터가 먼저 나가는 형식 예제코드 import java.util.LinkedList; import java.util.Queue; /** * Queue */ public class M2_Queue { public static void main(String[] args) { Queue queue = new LinkedList(); queue.offer(5); // push 5 queue.offer(3); // push 3 queue.offer(2); // push 2 queue.poll(); // pop 5 queue.offer(1); // push 1 queue.poll(); // pop 3 while (!queue.isEmpty()) { System.out.printl..
Read more들어가기전, 스택 (Stack) https://devfunny.tistory.com/708 스택 (Stack) 스택 1) 선입후출 : 먼저 들어온 데이터가 나중에 나가는 형식 예제코드 import java.util.Stack; /** * Stack */ public class M1_Stack { public static void main(String[] args) { Stack stack = new Stack.. devfunny.tistory.com DFS - 깊이 우선 탐색 - 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. - 스택 또는 재귀함수를 사용한다. [수행 과정] 1) 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2) 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라..
Read more스택 1) 선입후출 : 먼저 들어온 데이터가 나중에 나가는 형식 예제코드 import java.util.Stack; /** * Stack */ public class M1_Stack { public static void main(String[] args) { Stack stack = new Stack(); stack.push(5); // push 5 stack.push(3); // push 3 stack.push(8); // push 8 stack.pop(); // pop 8 stack.push(2); // push 2 stack.pop(); // pop 2 while(!stack.isEmpty()) { System.out.println(stack.peek()); // 최상위 데이터 peek stack...
Read more구현 구현이란, 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. (구현 유형) - 완전 탐색 : 모든 경우의 수를 다 계산하는 해결 방법 - 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행 구현에서의 까다로운 문제 유형 1) 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 2) 특정 소수점 자리까지 출력해야 하는 문제 3) 문자열이 입력으로 주어졌을 대 한 문자 단위로 끊어서 리스트에 넣어야 하는 문제 4) 어떻게 풀면 될지 대략 감은 오는데, 막상 코드로 옮기려니 무엇부터 작성해야 할지 모른다. 5) 적절한 라이브러리를 찾아서 사용해야 하는 문제
Read more그리디 알고리즘 그리디 알고리즘(탐욕법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구하며, 이러한 그리디 해법은 그 정당성 분석이 중요하다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토해야한다. 문제 유형을 분석하기 어렵다면, 해당 문제가 그리디 알고리즘으로 풀이할 수 있는게 아닌건지 생각해봐야한다. 그리디 알고리즘은 기준에 따라 좋은 것을 선택하는 것이므로 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 알게모르게 제시해준다. 문제 상황 루트 노드부터 시작하여 거쳐 가는 노드 값의 합을 최대로 만들고 싶다. 1) 일반적인 상황에서 그리디 알고..
Read more@JobScope와 @StepScope 개념 - 해당 어노테이션이 선언되면 생성이 어플리케이션 구동 시점이 아닌 빈의 실행 시점에 이루어진다. 스프링의 @Bean 어노테이션은 스프링이 초가화되는 시점에 빈이 생성된 후 관리된다. 스프링 배치에서 @JobScope, @StepScope 어노테이션은 어플리케이션이 실제로 실행되는 시점에 생성된다. - 스코프를 프록시 모드를 기본값으로 하기 때문에, 어플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출해준다. @JobScope - Step 선언시에 사용한다. - @Value : jobParameters, jobExecutionContext 만 사용 가능하다. @StepScope - Tasklet 이나 ItemReader, Item..
Read more1) 연관관계 적용 Member member = new Member(); member.setUsername("kimseohae"); member.setAge(10); Team team = new Team(); team.setName("team1"); team.setName("team"); member.setTeam(team); em.persist(team); em.persist(member); em.flush(); em.clear(); 2) Join 예제 - Inner TypedQuery query = em.createQuery("select m from Member as m inner join m.team t", Member.class); List resultList = query.getResultLi..
Read more예제코드 Member.java package jpql; import javax.persistence.*; @Entity @Table(name="MEMBER") @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; ... } Main.java package main.paging; import jpql.Member; import javax.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory..
Read more테스트 코드 작성 로그 -2 TODO - POST 메서드 호출 - @RequestBody param 전송 - DTO(Object) 를 Json String 으로 변환 (with Jackson) - API Response 의 "data" 특정 key 값의 결과만 꺼내오기 - Json String 을 List 로 변환 (With jackson) 테스트 코드 import com.couchbase.client.java.json.JsonObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databin..
Read more테스트 코드 작성 로그 -1 로그인 API - 테스트 코드를 위한 포스팅으로, 상세 로그인 로직은 생략 package com.api.shop.modules.controller; import com.api.shop.common.Output; import com.api.shop.modules.form.LoginForm; import com.api.shop.modules.form.MemberForm; import com.api.shop.modules.repository.MemberRepository; import com.api.shop.modules.service.AuthService; import com.api.shop.modules.service.MemberService; import io.swagger...
Read more들어가며 SimpleJob, FlowJob 에서 각 STEP의 결과 상태값에 따라 BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION 테이블의 EXIT_CODE, STATUS 컬럼에 어떻게 셋팅되어지는지 확인해보자. 명칭 설명 STATUS (batchStatus) JobExecution, StepExecution의 속성 값으로, JOB, STEP의 최종 결과 상태를 가진다. EXIT_CODE (ExitStatus) JobExecution, StepExecution의 속성 값으로, JOB, STEP의 실행 이후 어떤 상태로 종료되었는지정의한다. SimpleJob package com.spring.batch.flowjob; import lombok.RequiredArgsConstruc..
Read moreJob 재실행 Job의 재실행에 대해서는 아래 포스팅을 참고하자. https://devfunny.tistory.com/680 SpringBatch 에서 JobInstance, JobExecution 의 관계 들어가기전 JobInstance, JobExecution 의 개념은 알고가자. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡.. devfunny.tistory.com JOB을 재실행하면 FAILED 상태로 끝난 STEP만 실행 대상이 되는데, allowStartIfComplete(true)를 사용하여 COMPLETED로 끝..
Read more테이블 구조 부모테이블 자식테이블 식별자 클래스 ParentA.java ChildA.java ParentAId.java ParentB.java ChildB.java ParentBId.java @IdClass 1) ParentA.java package com.book.jpa.chapter07.identifying.idClass; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; @Entity @IdClass(ParentAId.class) public class ParentA { @Id @Column(name = "PARENT_I..
Read more