전체 글

중요한 것은 꺾여도 그냥 하는 마음
https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 풀이 사용한 알고리즘 : 플로이드 워셜 알고리즘(Floyd Warshall) 풀이전략 전형적인 플로이드 워셜 알고리즘을 사용한 문제이다. 플로이드 워셜은 A에서 B로 가는 거리를 D(AB)라고 할 때, 다른 노드 K를 지나쳐 가는 것과 현재 거리를 비교하여 더 짧은 거리를 D(AB)에 저장시키는 알고리즘이다. 예로 D(AB) = Math.min(D(AB),D(AK)+D(KB))처럼 특정 노드 K를..
· JPA
준영속 상태 -> 영속 상태 변환될 때 em.persist(member); em.find(Member.class, "member1"); 영속 상태 -> 준영속 상태 1) 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되는 것 2) 영속성 컨텍스트가 제공하는 기능(1차 캐시, 변경 감지 등)을 사용 못함 준영속 상태로 만드는 방법 1) em.detach : 특정 엔티티만 준영속 상태로 전환 Member member = em.find(Member.class, 150L); // id가 Long타입이므로 뒤에 L붙임 member.setName("AAAAA"); em.detach(member); tx.commit(); // 아무리 커밋해도 변경 내용이 DB에 저장되지 않음 2) em.clear() : 영속성 컨텍스..
· JPA
플러시란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것 플러시 발생하는 생기는 일 1) 변경 감지 2) 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 3) 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법 1) em.flush() : 직접 호출 2) 트랜잭션 커밋 : 플러시 자동 호출 3) JPQL 쿼리 실행 : 플러시 자동 호출 영속성 컨텍스트의 쓰기 지연 SQL 저장소에 쌓여있는 쿼리들을 DB에 반영시키는 명령이다. JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유 em.persist(memberA); em.persist(memberB); em.persist(memberC); query = em.createQuery("se..
· JPA
영속성 컨텍스트의 이점 1) 1차 캐시 2) 동일성(identity) 보장 3) 트랜잭션을 지원하는 쓰기 지연(transcational write-behind) 4) 변경감지(Dirty Checking) 5) 지연 로딩(Lazy Loading) 1. 1차 캐시(엔티티 조회) Member member = new Member(); member.setId("member1"); member.setNAme("memberA"); em.persist(member); Member findMember = em.find(Member.class, "member1"); Member findMember2 = em.find(Member.class, "member2"); 위의 findMember는 member 객체가 영속 상태이기..
· JPA
JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑 2. 영속성 컨텍스트 EntityManagerFactory : 고객의 요청이 올 때마다 새로운 EntityManager 생성, DB당 하나 존재 EntityManager : 내부적으로 데이터베이스 커넥션을 사용해서 DB에 접근 영속성 컨텍스트란? -엔티티를 영구 저장하는 환경 EntityManager.persist(entity); 는 영속성 컨텍스트를 통해 entity를 영속화한다는 뜻으로, entity를 DB에 저장한다는 것이 아니라 영속성 컨텍스트라는 곳에 저장한다. -영속성 컨텍스트는 논리적이 개념 - 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. => 엔티티 매니저를 생성하면 영속성 컨텍스트가 생성되며 1:1로 매핑된다. 쉽게..
https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 풀이 사용한 알고리즘 : 데익스트라(Dijkstra) 풀이전략 전형적인 데익스트라 알고리즘을 사용한 최단거리 문제이다. 다만 계속해서 시간초과가 발생해서 골머리였는데, 이유는 ArrayList가 아닌 LinkedList 사용 때문이었다. ArrayList / LinkedList 검색 최대 시간 복잡도 ==> O(1) / O(..
https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net 풀이 사용한 알고리즘 : 데익스트라(Dijkstra) 풀이전략 전형적인 데익스트라 알고리즘 문제이다. 우선순위 큐를 사용하지 않고, 각 노드에서 최단거리 노드를 구할 때 함수를 사용하면 시간초과가 발생했다. 따라서 우선순위 큐를 구현하고 거리에 따라 오름차순 정렬되도록 해야한다. 1. 시작 노드를 우선순위 큐에 먼저 inqueue하고 해당 노드를 방문처리, dis..
해결방법 1. 아래 붉은 원을 그린 Override 체크박스를 체크한다. Settings->Builde, Excution, Deployment -> Build Tools -> Maven 2. 그럼 옆 Maven에 Dependencies 폴더가 생기는 것을 확인할 수 있다. 3. 만약 안 생기고, 오류 구문이 계속뜨면 재시작한 뒤 maven을 reload해준다.
https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 풀이 사용한 알고리즘 : 정렬 풀이전략 문제 자체는 어렵지 않은데 JAVA에서 최적화된 정렬방법 및 입출력을 사용하지 않으면 시간초과가 나오는 문제였다. 문자열을 출력할 때, 한 줄 한 줄 출력을 하기보다 StringBuilder를 사용하는 것이 더 효율적이었다. StringBuilder는 출력해야할 문자열들을 하나로 묶어줬다가 한번에 출력시키는 역할 수행한다. 또한 정렬에서 Array..
https://www.acmicpc.net/problem/2357 2357번: 최솟값과 최댓값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100 www.acmicpc.net 풀이 사용한 알고리즘 : 세그먼트 트리 풀이 전략 세그먼트 트리란 특정 구간의 합(최솟값, 최댓값, 곱 등)을 구하는 데 사용하는 자료구조로 위와같은 구조를 가진다. 최댓값을 저장하는 트리 초기 설정 코드 static int max_init(int arr[], int node, int nodeLeft, int nodeRight){ if(nodeLeft==nod..
째로스
개발일지