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방향으로 밖에 이동하지 못한다는 조건으로 생각해 보자. 두 번째 조건을 반대로 생각해보면, 현재 위치에 있으려면 그전에는 왼쪽, 위, 왼쪽 위 대각선 중 하나에 있어야..
상황레디스는 각각의 명령어들은 원자적으로 실행이 되지만, 비즈니스로직을 작성하다 보면 여러 명령어들을 한 번에 처리해야 하는 경우가 생긴다. 이를 위해, 레디스를 루아스크립트를 이용해서 여러 명령어를 원자적으로 처리할 수 있도록 지원하고 있다.레디스에서 LuaScript 사용하기 127.0.0.1:6379> eval "return 'Hello world!'" 0"Hello world!"레디스로 스크립트를 실행하는 명령어는 EVAL 이며, 그 다임 인수로 “…”를 감싸서 루아스크립트를 작성하면 된다. 또한 그 다음 인수로는 이후 입력될 KEY 개수이고, 키 개수만큼 입력한 다음의 인수로는 인수를 입력받는다. EVAL [ , ..., , ...]정리하면 위와 같이 입력할 수 있다. 또한 위의 예제에서 ..
문제 @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..
배경 노션으로 작성한 이력서를 PDF로 내보내기 하면 페이지로 나눠질 때 페이지 사이 간격이 우주만큼 커지게 된다. 또 상하좌우 여백도 조절하지 못해서 아쉬웠는데, 더 이쁘게 뽑아내는 방법을 공유하려고 한다. 1. 좌우 너비 늘리기 오른쪽 위의 ... 버튼을 누르고, 전체 너비를 켜주고, 내보내기를 누른다. 2. HTML 내보내기 내보내기 형식을 HTML로 하고 내보내기 버튼을 클릭한다. 3. 브라우저에서 인쇄 열기 오른쪽 위 ... 버튼을 누르고 인쇄 버튼을 누른다.4. 페이지 커스텀 조절 PDF로 저장 -> A4 -> 여백 맞춤 -> 배율 맞춤 (65 설정) 왼쪽 페이지의 상하좌우로 있는 mm 단위로 여백을 입맛에 맞추면 되는데, 나는 상하 10mm, 좌우 20mm로 정했다. 끝!!
문제Jacoco로 테스트 커버리지를 검사하다 보면, lombok이 만들어준 getter, setter, 생성자 등등까지 테스트 항목에 포함되게 된다. getter, setter까지 테스트를 하는 것은 테스트를 작성하는 의미가 없다고 판단해서 이를 무시할 수 있는지 알아보았다. 해결// lombok.config# jacoco 테스트 커버리지 시, lombok이 생성한 코드는 제외lombok.addLombokGeneratedAnnotation = true 프로젝트 루트 디렉토리에 lombok.config 파일을 만들어서 위와 같이 작성해 주었다.