2024/11 28

[백준 18428번] 감시 피하기 - java

문제 설명1. N X N 복도가 있다.2. T 선생 S 학생 X 빈공간3. 선생은 상하좌우를 볼 수 있고 장애물이 있으면 그 뒤는 못본다.4. 장애물을 정확히 3개 설치해서 모든 학생이 안보이면 된다.풀이 과정1. BF + 백트래킹2. 모든 위치에 장애물을 둬 가면서 학생이 확인되는지를 보면 된다.3. 미리 선생의 위치를 알아두고, 그곳에서 볼 때 장애물인지 파악하기4. 장애물의 배치는 모든 X에 두고 보면 된다.코드import java.util.*;public class Main{ private static char map[][]; private static boolean checker[][]; private static int N; private static boolean ans..

[백준 16987번] 여행 가자 - java

문제 설명1. 테스트용 계란을 왼쪽부터 집는다.2. 다른 계란하고 부딪혀본다. (내구도는 무게에 의해 깎이고 내구도가 0보다 작거나 같으면 깨짐)3. 모든 경우에서 최대한 많은 계란을 깬다면 그 숫자는?풀이 과정1. BF - DFS + 백트래킹으로 풀면 된다.2. 보면 결국 어떤 계란을 집었을 때에 하나씩 테스트하고, 그렇게 마지막까지 도달하면 하나의 경우를 테스트하는 것이다(BF - DFS)3. 그리고 그 테스트가 끝나면 아무일 없던 것처럼 계란을 돌려놓는다(백트래킹)4. 재귀함수를 통해서 구하고 ans를 구해주면 된다.코드import java.util.*;public class Main{ private static List eggList = new ArrayList(); private st..

알고리즘 공부 2024.11.29

Slash 24 - 보상 트랜잭션으로 분산 환경에서 안전하게 환전하기 세션을 보고 간단히 정리해 봤다.

https://www.youtube.com/watch?v=xpwRTu47fqY&t=1101s기존에 모놀리식으로 되어있었긴 한데 이거를 MSA로 바꿈원화 계좌 -> 기존에 있던 로직들이 조금씩 옮겨감외화 계좌 -> 기존에 없던 신규 상품은 아예 DB도 다르게 해서 개발중환전은 DB계좌가 분리된 원화서버 / 외화서버에서 개발되어야 한다.이렇게 되면 Transaction을 할 수 없다.분산 트랜잭션2PCTwo Phase CommitSaga PatternTwo Phase Commit두 단계로 나눠 커밋 진행VotingCoordinator 가 각 트랜잭션 참가자에게 커밋 가능 여부를 질의한다.그래서 각 트랜잭션은 열고 가능 여부 응답한다.Commit모든 참여자가 커밋 가능한 경우 트랜잭션을 진행한다.하나라도 실패..

[백준 1976번] 여행 가자 - java

문제 설명1. 첫번째 줄에 도시의 갯수가 주어진다.2. 그 다음은 여행 계획에 속한 도시의 수가 주어진다.3. 다음부터 그 줄의 도시가 어디랑 연결되었는지 주어진다.4. 마지막에는 여행을 가는 계획이 주어진다.풀이 과정1. 유니온 파인드 문제이다. 모든 도시가 연결되어 있는지를 파악한다.2. 주어지는 값들을 유니온해서(parent에 연결) 같은 루트에 있다고 맞춰준다.3. 이후로는 마지막에 주어진 계획 도시들이 다 같은 루트에 있는지만 파악하면 된다. 코드import java.util.*;public class Main{ private static int[] parent; private static int find(int x) { if (x == parent[x]) { return ..

알고리즘 공부 2024.11.27

[백준 19598번] 최소 회의실 개수 - java

문제 설명1. 첫째 줄에 회의의 갯수 N이 주어진다.2. 그 다음주터 N개의 회의 시작시간 - 끝나는 시간이 주어진다.3. 그 시간을 통해 모든 회의가 멈추지 않게 작동하는 회의실의 최소 갯수를 구하면 된다.풀이 과정 1. (내가 이렇게 풀어서 시간초과가 발생했었는데) 어떤 회의가 언제부터 언제인지를 알 필요는 없다. 2. 그냥 시작시간부터 회의실 하나의 자리를 차지하고 있고, 뭐가 됐든 나가는 시간에는 나간다는 것이다. 3. 그러니까 어떤 회의가 언제인지 알 필요는 없고, 언제 입장인지 언제 퇴장인지를 알면 된다. 4. 그러고 시간 순서대로 나열하면 회의실에 들어가 있는 회의의 갯수를 알 수 있다.  코드import java.util.*;public class Main { public static v..

알고리즘 공부 2024.11.26

Fat JAR / Thin JAR 간략정리

Spring Boot 관련 회의를 하는데 Fat JAR이라는 이야기가 나왔다.근데 이거 처음 들어봐서... 한번 찾아봤다.간단하게 말하자면 애플리케이션 실행에 필요한 모든 의존성 및 코드를 하나의 JAR파일로 패키징한 것 이라는 것이다.이를 통해 단일 JAR파일로 애플리케이션을 실행할 수 있다는것.Spring boot에서는 기본적으로 Fat JAR를 생성하며 이렇게 생성되는 덕분에 애플리케이션이 쉽게 배포되는 것이었다!!!대충 정리해 보면Fat JAR의존성을 포함실행에 필요한 모든 파일 포함Spring Boot는 기본적으로 Fat JAR 사용Thin HAR애플리케이션 코드만 포함의존성은 별도 경로에서 로드의존성을 별도로 참조하는 Spring이 이와 비슷한 빌드이다.애플리케이션 -> Thin JAR의존성 ..

모던 자바 인 액션 4장 간략정리

정리스트림과 컬렉션의 차이가 뭘까?사실 회사에서 스트림을 쓰고 있는데 사용하면서도 이게 컬렉션보다 보기 편하고 쓰기 편하군ㅇㅇ 이정도 감상이었는데 이번에 확실히 감이 잡히더라스트림 시작여기서 제일 인상깊었고, 컬렉션과의 차이에 대해 쉽게 접근할 수 있었던게, 컬렉션의 주제는 데이터고 스트림의 주제는 계산 이라는 점이었다. 말하자면 컬렉션은 요소 저장 및 접근, 스트림은 그걸 가지고 계산하는 것이 주가 된다는 것이다.그리고 스트림이 가진 두가지 중요 특징이파이프라이닝대부분의 스트림 연산은 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환함lazy(결과값이 필요할 때에 계산하도록... 그니까 알아서 스트림의 중간/최종 연산을 통해 안쓸거는 안쓰게 하는 최적화 같은 느낌이다)이..

이론 정리/java 2024.11.26

모던 자바 인 액션 3장 간략정리

람다 표현식람다 표현식이란?메서드로 전달할 수 있는 익명 함수를 단순화한 것람다 표현식은 일단 간결하게 코드를 전달하는데에 쓰인다. -> 말하자면 사실 이전에 못하던 기능을 람다를 통해 할 수 있다기 보다는, 그냥 코드가 깔끔해지고 알아보기 쉬운 것이다.저기 위의 설명에서 그 이유를 대충 짐작할 수 있는데익명이름이 따로 없다. 이름을 만들 필요가 없으니 구현이 간단해진다.함수메서드와 다르게 특정 클래스에 종속되지 않는다.파라미터 리스트, 바디, 반환 형식, 예외 리스트는 포함된다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 코드를 막 구현할 필요는 없다.람다에 대해서(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.ge..

이론 정리/java 2024.11.25

모던 자바 인 액션 2장 간략정리

동적 파라미터화여러 요구사항에 효과적으로 대응 가능한 방법. 아직은 어떤 식으로 동작할지가 결정되지 않은 코드 블록이고, 나중에 프로그램에서 실행된다.문제 상황1. 녹색 사과 필터링enum Color { RED, GREEN }빨강, 초록 사과가 있다.여기서 만약에 녹색 사과를 필터링하려 하면if(GREEN.equals(apple.getColor())) { result.add(apple);}요렇게 쓸 것이다.단점만약 빨간사과, 노란사과, 검은사과 등등... 필터링 개수가 많아진다면? 저 if문이 계속해서 늘어나거나 또 빼짐에 따라 줄어들 수 있을 것이다.2. 색의 파라미터화위의 1에서의 단점을 해결하기 위함이다.public static List filterApples(List inventory, Co..

이론 정리/java 2024.11.24