1. 2차원배열일때 1순위(숫자), 2순위(명칭)으로 정렬하는 익명함수 구현 /* 2차원 배열 */ int N = in.nextInt(); String[][] arr = new String[N][2]; for(int i = 0; i < N; i++) { arr[i][0] = in.next();// 숫자 arr[i][1] = in.next();// 명칭 } Arrays.sort(arr,new Comparator() { @Override public int compare(String[] o1, String[] o2) { return Integer.compare(Integer.parseInt(o1[0]), Integer.parseInt(o2[0])); } }); for(String[] ar: arr) { Sy..
Read more1) N 입력받고 개수만큼 한줄로 받아 array에 담기 3 5 1 2 Scanner sc = new Scanner(System.in); String param = sc.nextLine(); // 3 N = Integer.parseInt(param.split(" ")[0]); int[] arr = new int[N]; /* 집합 S */ String S = sc.nextLine(); // 5 1 2 for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(S.split(" ")[i]); } 2. N, K를 한 줄에 입력받고 N개 만큼 한줄씩 입력받아 Stack에 담기 10 4200 1 5 10 50 100 500 1000 5000 10000 50000 Scann..
Read more문제 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 풀이코드 package seohae.algorithm.level1; import java.io.IOException; import java.util.Arrays; import java.util.Scanner; /** * https://www.acmicpc.net/problem/1182 */ public class Problem_014_1182 { stati..
Read more문제 https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 풀이코드 package seohae.algorithm.level2; import java.util.*; /** * https://programmers.co.kr/learn/courses/30/lessons/1829 */ public class Lesson_051_1829 { static int graph[][]; static boolean[][] visited..
Read more잡의 재시작 방지 스프링 배치의 모든 잡은 실패하거나 중지될 때 다시 실행할 수 있었다. 스프링 배치는 기본적으로 이렇게 동작하므로 우리는 다시 실행하면 안되는 잡이 있을시 재시작을 방지해야한다. preventRestart() preventRestart() 메서드를 호출하여 잡이 실패하거나 어떤 이유로 중지된 경우에도 다시 실행할 수 없다. /** * 잡 실행 * @return */ @Bean public Job transactionJob() { return this.jobBuilderFactory.get("transactionJob") .preventRestart() /* 잡은 기본적으로 재시작이 가능하도록 구성되어있다. 잡의 재시작 방지 */ .start(...) .next(...) .build();..
Read more스텝 실행 중 오류 던지기 스프링 배치는 예외가 발생하면 기본적으로 스텝 및 잡이 실패한것으로 간주한다. 따라서 아래 예제처럼 throw Exception 에 의해 잡은 FAILED(실패) 상태로 중지된다. 스프링 배치는 잡이 중지되면 현재 청크를 롤백하고, 성공적으로 완료한 작업까지 커밋하고, 재시작 시에는 중단됐던 부분을 찾아낸다. private Transaction process(FieldSet fieldSet) { if(this.recordCount == 25) { throw new ParseException("This isn't what I hoped to happen"); } ... } 오류를 던짐으로써 해당 스텝은 ExitStatus.FAILED 상태로 스텝이 완료되지 않았다. 실제로 예외가..
Read moreStepExecution 스텝 중지 beforeStep 에서 StepExecution 을 가져온 다음, 이후 실행될 스텝에서 setTerminateOnly() 메서드를 사용한다. setTerminateOnly() 메서드를 호출하면, 스텝이 완료된 후 스프링 배치가 종료된다. 아래 예제처럼 if문의 조건에 충족하지 못할시 해당 스텝 완료 후 스프링 배치를 종료시킬 수 있다. public class TransactionReader implements ItemStreamReader { ... /** * afterStep 이 아닌 beforeStep 을 사용하도록 변경하여 StepExecution 을 가져온다. */ private StepExecution stepExecution; ... /* 스텝 빌드 전 s..
Read more문제 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 풀이 package seohae.algorithm.level2; import java.util.*; /** * https://programmers.co.kr/learn/courses/30/lessons/42888 */ public class Lesson_050_42888 { public static void main(String[] args) { Lesso..
Read more문제 https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 풀이 package seohae.algorithm.level2; import java.util.Stack; /** * https://programmers.co.kr/learn/courses/30/lessons/12973 */ public class Lesson_049_12973 { public static void main(String[] ar..
Read more문제 42626번 https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 풀이 (실패 : 시간초과) List 사용 풀이 (테스트 케이스 통과, 효율성 시간초과 발생) package seohae.algorithm.level2; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream..
Read more문제 11047번 - 동전 0 문제 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 풀이 package seohae.algorithm.level1; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner; import java..
Read more쿼츠 Quartz 쿼츠란, 오픈소스 스케줄러이다. 쿼츠는 자바 환경의 규모와 상관없이 사용이 가능하고 잡 실행에 유용한 스프링 부트 지원과 같이 오래전부터 스프링 연동을 지원하고있다. 쿼츠는 아래 3가지 컴포넌트를 제공한다. 1) 스케줄러 (Scheduler) : 스케줄러는 SchedulerFactory 를 통해서 가져올 수 있으며 JobDetails 및 트리거의 저장소 기능을 한다. 2) 잡 (Job) 3) 트리거 (Trigger) : 작업 실행 시점을 정의한다. : 트리거가 작동되어 쿼츠에게 잡을 실행하도록 지시하면, 잡의 개별 실행을 정의하는 JobDetails 객체가 생성된다. 스프링 배치 처리 쿼츠에서 잡과 JobDetails 객체를 정의하는 모델은 스프링 배치에서 잡과 JobInstance 를..
Read more들어가기 스프링 부트는 CommandLineRunner, ApplicationRunner 라는 두가지 메커니즘을 이요해 실행 시 로직을 수행한다. 이 두 인터페이스는 ApplicationContext 가 리프레시(refresh) 되고, 애플리케이션이 코드를 실행할 준비가 된 이후에 호출되는 하나의 메서드를 가지고 있다. 스프링 부트를 스프링 배치가 함께 사용할때는 JobLauncherCommandLineRunner 라는 CommandLineRunner 가 사용된다. JobLauncherCommandLineRunner 스프링 배치의 JobLauncher 를 사용해 잡을 실행한다. 스프링부트가 ApplicationContext 내에 구성된 모든 CommandLineRunner 를 실행할때, 클래스 패스에 s..
Read more잡의 종료 상태 스프링 배치의 잡은 종료 상태를 가진다. 잡 실행시 갖게되는 JobInstance 는 성공적으로 완료되면 두번 이상 실행될 수 없다. 이는 잡 이름과 파라미터로 식별된다. 만일 사용자가 프로그래밍 방식으로 잡을 종료한다면, 잡의 종료 상태를 알고 그에 따라 분기할 수 있어야한다. 잡의 종료 상태는 3가지이다. 1) Completed (완료) 2) Fail (실패) 3) Stopped (중지) 스프링 배치가 JobRepository 에 저장할 BatchStatus를 판별할때 스쳅의 ExitStatus 를 평가한다. ExitStatus 는 스텝, 청크, 잡에서 반환될 수 있다. BatchStatus 는 JobExecution 또는 StepExecution 내에 보관되고, JobReposito..
Read more상황 스프링 배치가 진행중이다. 진행 도중에 오류가 발생했고, 실패한 시점부터 처리를 다시 시작해야한다. 이 경우에 스프링 배치는 실패한 시점을 어떻게 알아낼 수 있을까? 실패시마다, 사용자가 실행 상태를 재설정하는 일은 매우 번거롭고 어렵다. 스프링 배치가 이를 대신해준다. JobExecution 우리는 이미 JobExecution 에 대해 배웠다. https://devfunny.tistory.com/476?category=820618 [스프링배치] 잡의 실행 (JobLauncher, JobInstance, JobExecution, JobParameters) 잡의 실행 잡의 실행은 잡 러너 (Job Runner) 에서 시작된다. 잡 러너는 잡 이름과 여러 파라미터를 받아, 잡을 실행시킨다. 스프링 배치..
Read more