https://www.acmicpc.net/problem/2096 설명N은 1 이상 10만 이하로, 한 줄에는 3칸이 있고 각 칸에는 최대 9까지 올 수 있으므로, 최악의 경우의 합을 더해도 9 * 10만 = 90만으로 int의 최댓값보다 작다. 또한 메모리가 4MB인데, 4byte(int) * 3칸 * 10만 줄 = 1.2MB로, 입력받는 배열에 최댓값, 최솟값 + 기타 연산하면서 생기는 객체들까지 고려하면 메모리 초과가 날 것 같았다. 그래서 입력 배열은 따로 만들지 않고 최댓값 배열과 최솟값 배열만 만들되, 각각 2 * 3 배열을 만들어서 값을 재사용하기로 했다. 우선 N과 최댓값 배열 maxArr, 최솟값 배열 minArr을 선언해준다. 그리고 각 배열을 2*3으로 초기화해준다. i / j0..
자바
https://www.acmicpc.net/problem/11048 설명전형적인 DP 문제이다. 문제에서는 (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있다는 부분 때문에 현재 위치를 기준으로 다음 위치의 값을 어떻게 넣어줄지 생각하게 되는데, DP는 역으로 현재 위치의 값이 과거의 어느 위치로부터 영향받았는지로 생각하면 조금 더 수월하게 풀린다. 물론 그래도 DP는 너무 어렵다.,... 문제의 답이 N, M에 도착할 때 가장 많은 사탕을 가지고 있어야 하는 경우이고, 이동은 오른쪽, 아래, 오른쪽 아래 대각선 3방향으로 밖에 이동하지 못한다는 조건으로 생각해 보자. 두 번째 조건을 반대로 생각해보면, 현재 위치에 있으려면 그전에는 왼쪽, 위, 왼쪽 위 대각선 중 하나에 있어야..
문제 @Bean(JOB_NAME + "_reader") public ItemReader itemReader() { return new JpaPagingItemReaderBuilder() .name(JOB_NAME + "_reader") .pageSize(CHUNK_SIZE) .entityManagerFactory(entityManagerFactory) .queryString("SELECT p FROM Product p") .build(); }이렇게 JpaPagingItemReader로 엔티티를 읽어오도록 하고, 각 Product 엔티티별로 price를 +1000 하는 작업을 하기로 했다. 9개를 가지고 작업을 ..
상황DB를 2개를 쓰고, 하나를 primary db로 읽기+쓰기 작업을, 나머지 하나는 replica db로 읽기 작업만 하는 DB로 구성이 되었을 때, 매번 기능을 만들 때마다 읽기/쓰기를 구분해서 데이터소스를 가져오기보다, 어노테이션의 readOnly 속성으로 알아서 데이터소스를 구분하도록 하고 싶었다. spring: datasource: hikari: main: driver-class-name: org.postgresql.Driver jdbc-url: jdbc:postgresql://localhost:54326/sample username: sample password: 1234 sub: driver-class..
문제멀티 데이터소스 환경에서, 스프링 배치 5 버전에서는 특별한 설정을 하지 않으면 @Primary 데이터소스를 가져온다. 하지만 나는 Primary가 아닌 다른 데이터소스를 가져오려고 설정을 했더니 Job이 실행이 되지 않고, 또 application.yml 파일에 적어둔 배치 설정도 적용이 되지 않던 문제가 있었다. 상황# application.ymlspring: batch: jdbc: platform: postgresql # DBMS, 안 적으면 자동으로 탐색 # 실행할 스키마, 배치 라이브러리 내부에 각 DBMS 별로 sql이 작성돼있다. schema: classpath:org/springframework/batch/core/s..
문제 스프링은 트랜잭션에 진입한 후에 커넥션을 점유하고, 이후에 데이터소스를 결정한다. 우리는 두 개의 데이터소스를 채택해서, 이중으로 커넥션을 점유하는 문제가 있었다. 상황spring: application: name: multi-source-service datasource: hikari: postgres: driver-class-name: org.postgresql.Driver jdbc-url: jdbc:postgresql://localhost:54326/sample username: sample password: 1234 postgres-two: driver-class-name: org.postgresq..
문제Jacoco로 테스트 커버리지를 검사하다 보면, lombok이 만들어준 getter, setter, 생성자 등등까지 테스트 항목에 포함되게 된다. getter, setter까지 테스트를 하는 것은 테스트를 작성하는 의미가 없다고 판단해서 이를 무시할 수 있는지 알아보았다. 해결// lombok.config# jacoco 테스트 커버리지 시, lombok이 생성한 코드는 제외lombok.addLombokGeneratedAnnotation = true 프로젝트 루트 디렉토리에 lombok.config 파일을 만들어서 위와 같이 작성해 주었다.
문제멀티 데이터소스를 채택하면서, 메인 데이터소스는 @Primary를 붙였고, 배치 데이터소스는 @Qualifier를 사용해서 가져오려고 했었다. 하지만 lombok의 @RequiredArgsConstructor 사용 시 @Qualifier 사용이 불가능했던 문제가 있다. @Slf4j@Service@RequiredArgsConstructorpublic class TestService { private final DataSource dataSource; @Qualifier("batchDataSource") private final DataSource batchDataSource; // ...}TestService는 2개의 DataSource를 주입받고 있다. @Servicepu..
스프링을 쓰다 보면, src클릭 main 클릭 java 클릭 com 클릭 ooo클릭 ooo 클릭해야만 드디어 스프링 애플리케이션을 볼 수 있다. 근데 이제 시작이다. 그 하위의 디렉터리를 또 하나하나 클릭하다 보면 화딱지가 난다... 그러다 클릭 한 번으로 하위 디렉토리를 모두 열 수 있는 방법을 알게 되었다. 우선 설정을 연다. (맥은 cmd + ,)왼쪽 메뉴에서 키맵(keymap)을 클릭 후트리 노드 전체 펼치기(Fully Expand Tree Node) 검색트리 노드 전체 펼치기 우클릭 후 마우스 단축키 추가 클릭편한 단축키 등록 (나는 cmd + 휠클릭으로 했다)정말 너무 편하다....