분류 전체보기 139

백준 No.13305 주유소 - JAVA

https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 어떤 나라에 N개의 도시가 있다. 이 도시 들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 Km를 사용한다. 처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는..

알고리즘 2023.02.01

백준 No. 1753 JAVA

해당 글은 제가 모르는 부분을 디버깅하며 찾아가는 과정이기에 설명에 부족한 부분이 있을 수 있습니다 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정정의 번호 K가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수(u,v,w)가 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10이하의 자연수이다. 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다. 테스..

알고리즘 2023.02.01

백준 No.1463 1로 만들기 - JAVA

문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세가지이다. - X가 3으로 나누어 떨어지면, 3으로 나눈다. - X가 2로 나누어 떨어지면, 2로 나눈다. - 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력 풀이 3으로 나누거나, 2로 나누거나, 1을 빼서 연산 횟수의 최솟값을 구하는 문제이다. 여기서 배열(arr- DP) 배열의 인덱스는 주어진 숫자를 뜻한다. 즉 arr[10] 이면 10을 만들 때 사용한 연산 횟수의 최솟값이다. 그래서 아래와 같은 3가지 경우가 나올 수 있다. 3으로 나누어 떨어진다 -> arr[N/3] 2로 나누어 떨어진다 -> arr[N/2] 1을 뺀다 -> arr[N-1] 그리고 어떤..

알고리즘 2023.01.30

백준 No.2252 줄 세우기 - JAVA

해당 문제는 위상정렬을 알고 풀어야 했던 문제이다. 위상정렬 어떤 일을 하는 순서를 찾는 알고리즘이다. -> 방향 그래프에 존재하는 각 정점들의 선행 순서를 위배하지 않으면서 모든 정점을 나열하는 것 위상정렬(Topological Sort)의 특징 -> 하나의 방향 그래프에는 여러 위상 정렬이 가능하다. (사이클 안됨) -> 위상 정렬의 과정에서 선택되는 정점의 순서를 위상 순서라 한다. -> 위상 정렬의 과정에서 그래프에 남아 있는 정점 중에 진입 차수가 0인 정점이 없다면, 위상 정렬 알고리즘은 중된되고 이러한 그래프로 표현된 문제는 실행이 블가능한 문제가 된다. 위상정렬(Topological Sort)의 진행 1. 진입차수(Indegree)가 0인 정점(자신에게 들어오는 간선의 수 0)을 선택 - ..

알고리즘 2023.01.28

Spring - AOP,@Transactional

AOP(Aspect Oriented Programming) 관점 지향 프로그램이라고 불린다. 관점지향은 쉽게 어떤 로직을 기준으로 핵심적인 관저므 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 그림처럼 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이다. AOP 주요 개념 Aspect : 흩어진 관심사를 모듈화 한 것이고 주로 부가기능을 모듈화한다. Target : Aspect를 적용하는 곳(클래스, 메서드...) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPonit : Advice가 적용..

Spring 2023.01.27

Redis - 개념 및 Spring에서 사용

Cache 란? 다음에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해주는 것을 의미한다. 즉 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참고하지않고 Cache에 접근하여 처리할 수 있다. (주로 정적인 데이터를 다룰 때 사용하기 좋다. 주로 Open API 데이터들로 받은 값들은 DML로 바꿀 일이 없기 때문에 Cache로 저장해두는 것이 좋은 방법일 때가 있다) Memcached 란? Memcached는 무료로 사용할 수 있는 오픈소스이며 분산메모리 Cache 시스템이다. DB부하를 줄여 웹애플리케이션의 속도 개선을 위해 사용하며 DB나 API 호출 또는 렌더링 등으로부터 받아오는 데이터를 key-value로 저장한다. 단점 -> InMemory 기반의 시스템이므로..

JPA 2023.01.25

JPA - JPQL ORDER BY

TypedQuery query = em.createQuery("select m from Member m",Member.class"); List members = query.getResultList(); 기존에 Spring에서는 이렇게 EntityManager를 통해 직접 짜서 사용해야했는데 Spring Data JPA 는 확실히 편리해진 것 같다. 주로 @Query("SELECT m FROM Member m"); public List getResultList(); JpaRepository 를 상속한 인터페이스에 위처럼 작성한 뒤 가져다 쓰면 사용이 가능하다. order by를 이용한 정렬 order by를 native query와 동일하게 정렬 순서를 지정할 수 있다. 근데 다른 점은 여기서는 컬럼이 아..

JPA 2023.01.17

Spring Security - 2.7 이후 SecurityFilterChain

기존에는 WebSecurityConfugureAdapter를 상속받아 confugure 메소드를 오버라읻이하는 식으로 시큐리티를 구성했는데 2.7 이후부터는 상속받는 것이 아닌 SecurityFilterChain 을 bean으로 등록하는 형태로 변경되었다. @Configuration public class ProjectConfig extends WebSecurityConfigureAdapter{ @Override protected void configure(HttpSercurity http) throws Exception{ http.httpBasic(); http.authorizeReequests() .anyRequest().authenticated(); } 기존에는 이런식으로 구현했었는데 WebSecu..

Spring Security 2023.01.02

Spring batch - ChunkListener, StepListener

이 예제는 Chunk기준으로 Lsitener을 구현했다. 다른 Step, Job도 크게 구현하는게 다르지 않다 ChunkPracListener 클래스 작성 ChunkListener을 implement해서 구현해서 Step에 등록해주면 된다. - beforeChunk >> 정크 시작전 - afterChunk >> 정크 끝난 후 - afterChunkError >> 에러날 경우 모두 ChunkContext를 매개변수로 받아서 StepExecution과 같이 Step 정보를 받아 활용할 수 도 있다. Step에서 listener을 등로해주면 정상작동한다. 정크 사이즈가 10이므로 10번마다 위에서 설정한 before과 after가 실행되는 것을 볼 수 있다. StepListener도 Step에서 등록하는데 같..

Spring Batch 2022.12.28

Spring Batch - JPA 데이터 읽기

JPA 데이터를 읽으려면 EntitiyManagerFactory가 필요하다 처음에 EntityManager 주입받을 떄 @PersistenceContext로 주입받았던 기억이 있어 생성자 주입이 아닌 이 방식으로 주입하려 하다 에러가 계속났었다. 생성자 주입방식을 했어야 했던게 결국 맞았었다. jobBuilderFactory, stepBuilderFactory, entityManagerFacotry 를 주입받는다. Job Step JpaPagingItemReader를 사용하여 데이터를 읽어들였다. 여기서는 pageSize를 설정할 수 있는데 분명 위에 Step에서도 chunkSize를 설정하기에 어떤 사이즈를 정하는 건지 알기 어려워 콘솔에 결과로 알게 되었다! 일단 JpaPagingItemReader를..

Spring Batch 2022.12.26