[JPA] EntityManager 정리
·
JPA
JPA 를 사용하면서, 엔티티 매니저에 대한 개념이 부족한 것 같아, 관련 개념들을 정리한 글이다.EntityManagerFactory엔티티 매니저 팩토리는 엔티티 매니저를 만드는 팩토리로 여러 스레드가 동시에 접근해도 안전하게 사용할 수 있도록 설계되었다. 따라서, 엔티티 매니저 팩토리를 여러 군데에서 @PersistenceUnit 으로 주입 받아도 인스턴스 객체는 항상 같다. EntityManagerFactory 를 인스턴스화 할 때 생성비용이 크기 때문에 한개만 만들어 애플리케이션 전체에서 공유한다. 생성 비용이 크다는 것은 EntityManagerFactory 를 인스턴스화할 때 여러 가지 초기화 작업이 많이 필요하다는 것을 의미한다. 아래와 같은 초기화 작업이 이루어지며, 리소스와 시간이 많이 ..
[백준] 17403 - 가장 높고 넓은 성 Python
·
알고리즘/볼록 껍질
https://www.acmicpc.net/problem/17403 17403번: 가장 높고 넓은 성 첫 번째 줄에 n개의 정수 x1, x2, ..., xn을 공백으로 구분하여 출력한다. xi는 i 번째 표지판이 사용되었을 경우 사용된 층수이며, 사용되지 않았으면 0이다. www.acmicpc.net n 개의 표지판을 사용해 각 층별로 가장 넓은 면적을 확보하면서 가장 높이 성을 쌓았을 때, 각 표지판들이 몇 번째 층고에 사용되었는지 구하는 문제다. 1층부터 최대한 넓은 면적을 확보하기 위해 모든 표지판들의 좌표를 이용해 볼록껍질을 구성한다. 볼록 껍질에서 꼭지점을 이루는 점들이 표지판의 위치가 된다. 볼록 껍질 내부에 있거나 꼭지점이 아닌 변 위에 있는 점은 볼록 껍질을 구성하지 못한 점이다. 이러한 ..
[백준] 11440 - 피보나치 수의 제곱의 합 C++
·
알고리즘/분할정복을 이용한 거듭제곱
https://www.acmicpc.net/problem/11440 11440번: 피보나치 수의 제곱의 합 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net n이 주어졌을 때, 0번째 피보나치 수의 제곱부터 n번째 피보나치 수의 제곱을 합한 값을 구하는 문제다. 피보나치 수의 성질에 대한 문제로, 모든 피보나치수를 구해 제곱을 더할 수 없기 때문에 주어진 식에 대한 유도가 필요하다. 피보나치 수 일반항은 다음과 같다. n 대신 n-1 을 대입하고, Fn 에 대한 식으로 정리한다. 이를 구해야 할 식에 대입한다. Fn 과 Fn+1 를 구하면 n 번째까지 피보나치수의 제곱의 합을 구할 수 있다. 주어진 n이 1,000,00..
[백준] 1485 - 정사각형 Python
·
알고리즘/기초 기하학
네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지 판별하는 문제다. ccw 를 이용해 한 점을 잡아 각도가 작은 순으로 정렬 후 정사각형임을 판별할 수도 있지만, 판별하는 대상이 정사각형이기 때문에, 단순정렬만 이용해도 풀이가 가능하다. 2차원 평면 상에서 정사각형은 다음과 같이 나타낼 수 있다. 정사각형을 판별하기 위해 두 가지 조건을 만족하는지 확인한다. - 네 변의 길이가 같다 - 두 대각선의 길이가 같다. 따라서 한 점을 기준으로 나머지 점들의 좌표를 시계 또는 반시계 방향으로 정렬한 뒤, 네 변의 길이와 두 대각선의 길이가 같은지 판별한다. 입력으로 받은 점들을 배열에 넣고, 점들을 x 좌표, y 좌표 순으로 정렬하고, 맨 처음 점을 기준점 p 로 놓는다. x 좌표가 가장..
[백준] 16562 - 친구비 Python
·
알고리즘/유니온-파인드
https://www.acmicpc.net/problem/16562 16562번: 친구비 첫 줄에 학생 수 N (1 ≤ N ≤ 10,000)과 친구관계 수 M (0 ≤ M ≤ 10,000), 가지고 있는 돈 k (1 ≤ k ≤ 10,000,000)가 주어진다. 두번째 줄에 N개의 각각의 학생이 원하는 친구비 Ai가 주어진다. (1 ≤ Ai ≤ 10, www.acmicpc.net 친구가 없는 준석이가 "친구의 친구는 친구다" 라는 개념을 활용해 가장 적은 비용으로 모든 사람과 친구가 되는 최소 비용을 구하는 문제다. 친구의 친구임을 활용하기 때문에, 노드를 친구라는 집합 개념으로 묶어주는 전형적인 union-find 문제임을 알 수 있다. - 친구 집합에 포함되어 있는지 find 를 이용한다. - 친구끼리..
[백준] 1080 - 행렬 Python
·
알고리즘/그리디
https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 행렬 A 를 3X3 부분행렬에 있는 원소를 모두 뒤집어 다른 행렬 B 로 바꾸는데 필요한 연산 횟수의 최솟값을 구하는 문제다. 뒤집는데 별도의 규칙이 없기 때문에 A 의 왼쪽 위부터 3X3 부분행렬을 차례로 뒤집으면서 확인해본다. 3X3 부분행렬이므로, 현재 뒤집어진 부분행렬은 다음 시행에서 다시 뒤집힐 수 있을 것이다. 이때, 반드시 뒤집을 수 없는 부분은 부분행렬의 맨 왼쪽 위다. 따라서 부분행렬의 맨 왼쪽..
[백준] 20504 - I번은 쉬운 문제 Python
·
알고리즘/강한 연결 요소
https://www.acmicpc.net/problem/20504 20504번: I번은 쉬운 문제 2030년, Farmer John은 선린 인터넷 컴퍼니에서 소프트웨어 개발자이자 검색 팀장으로 근무하고 있다. John의 강한 의지에 따라 검색 팀에서는 모든 소프트웨어의 개발을 테스트 주도 개발(test-driven www.acmicpc.net 각 함수마다 실행 과정에서 호출할 가능성이 있는 함수들의 목록이 주어질 때, 주어진 테스트 케이스 내 함수를 실행해 모든 함수가 호출할 가능성이 존재하도록 하는 테스트케이스의 최소 개수를 구하는 문제다. 최소의 테스트케이스만을 이용해 모든 함수가 호출되도록 하기 위해 scc 집합의 연결관계를 확인해 본다. 예를 들어, scc 집합 1이 scc 집합 2로 갈 수 있..
[백준] 1007 - 벡터 매칭 Python
·
알고리즘/백트래킹
https://www.acmicpc.net/problem/1007 1007번: 벡터 매칭 평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속 www.acmicpc.net 평면 상에 N 개의 점들 중 서로다른 두 점을 골라 만들수 있는 N/2 개 벡터들의 합 벡터의 길이의 최솟값을 구하는 문제다. 예를 들어, 4개의 점 (1,1), (2,4), (3,2), (3,4) 중에서 각각 2개씩 시작점과 끝점으로 골라 (1,3), (0,2) 라는 벡터를 만든다면, 이때 합 벡터는 (1,5) 가 되고, 합 벡터의 길이는 (1+25)^(1/2) 가 된다. 문제 조건에서..