본문 바로가기

전체 글71

[JPA] N+1 문제 N+1 문제란? N+1 문제는 JPA등의 ORM(Object-Relational Mapping) 프레임워크에서 발생하는 성능 이슈. 한 번의 쿼리로 여러 개의 주 엔터티(예: Member)를 조회한 후, 각 주 엔터티에 연결된 하위 엔터티(예: Order)를 개별적으로 조회할 때 발생합니다. N+1 문제가 발생하는 이유 예를 들어와 `Order`가 아래와 같이 설정되어 있다고 가정해 봅시다. @Entity public class Member { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List orders = new ArrayList(); // getters and.. 2023. 9. 6.
[Gold V] 빌런 호석 - 22251 (Java) 문제 요약 치르보기 빌딩의 엘리베이터는 1층부터 N층까지 이용이 가능하고, 디스플레이에는 K 자리의 숫자가 표시됩니다. 숫자는 0으로 시작할 수 있고, 0부터 9까지의 각 숫자는 7개의 LED 표시등 중 일부가 켜져서 표현된다. 호석이는 이 엘리베이터의 LED를 최소 1개에서 최대 P개까지 반전시킬 계획을 세웠습니다. '반전'이란 켜진 LED는 끄고, 꺼진 LED는 켜는 것을 의미합니다. 그리고 반전을 통해 디스플레이에 표시되는 숫자를 1 이상 N 이하의 올바른 수로 바꿔서 사람들을 혼란스럽게 만들 예정이다. 당신은 치르보기를 사랑하는 모임의 회원으로, 호석이의 이런 행동을 미리 알아내서 막고 싶습니다. 현재 엘리베이터가 실제로 X층에 멈춰 있다고 할 때, 호석이가 반전시킬 수 있는 LED 경우의 수를 .. 2023. 9. 3.
[Gold III] 소문난 칠공주 - 1941 (Java) 문제 요약 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작했다. 곧 모든 여학생이 ‘이다솜파’와 ‘임도연파’의 두 파로 갈라지게 되었으며, 얼마 지나지 않아 ‘임도연파’가 세력을 확장시키며 ‘이다솜파’를 위협하기 시작했다. 위기의식을 느낀 ‘이다솜파’의 학생들은 과감히 현재의 체제를 포기하고, ‘소문난 칠공주’를 결성하는 것이 유일한 생존 수단임을 깨달았다. ‘소문난 칠공주’는 다음과 같은 규칙을 만족해야 한다. 이름이 이름인 만큼, 7명의 여학생들로 구성되어야 한다. 강한 결속력을 위해, 7명의 자리는 서로 가로나 세로로 반드시 인접해 있어야 한다. 화합과 번영을 .. 2023. 9. 3.
[Silver II] 예산 - 2512 (Java) 문제 요약 국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것이다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총예산을 다음과 같은 방법으로 배정한다. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 예를 들어, 전체 국가예산이 485이고 4개 지방의 예산요청이 각각 120, 110, 140, 150이라고 하자. 이 경우, 상한액을 127로 잡으면, 위의 요청들에 대해서 각각 120,.. 2023. 9. 3.
[D3] 무한 문자열 - 15758 (Java) 문제 요약 문자열 S에 대해, f(S)를 S를 무한히 반복해서 얻은 문자열이라고 정의하자. 예를 들어 f(“abcd”) = “abcdabcdabcdabcd…”이다. S≠T이라도 f(S)=f(T) 일 수 있다. 예를 들어 S = “ababab”, T = “abab”라면 f(S)와 f(T) 모두 “ababababababab…”이다. 두 개의 문자열 S와 T가 주어질 때, f(S)=f(T)인지의 여부를 구하는 프로그램을 작성하라. 문제 분석 두 문자열 길이의 최소공배수를 구한 후 각 문자열을 그 길이만큼 확장하고 두 문자열이 같은지 비교한다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader.. 2023. 8. 27.
[D3] 최고의 쌍 - 9839 (Java) 문제 요약 N개의 양의 정수가 주어졌을 때, 이들 중 정확히 서로 다른 두 개의 정수 쌍을 고르려고 한다. 이때, 두 정수를 고르는 데 있어서 특별한 제약 조건이 존재한다. 고른 서로 다른 두 정수를 x, y라고 하면, 두 정수의 곱 x*y는 10진수로 읽었을 때 증가하면서도 연속한 숫자들로 이루어져야 한다. 예를 들어 2, 23, 23456, 56789는 제약 조건을 만족하고, 21, 54321, 67890, 89012, 88, 889, 79는 제약 조건을 만족하지 않는다. 이 조건을 만족하는 모든 쌍 중, 두 정수의 곱이 최대화되는 쌍을 “최고의 쌍”이라고 부른다. 최고의 쌍이 존재하는지, 존재한다면 이 쌍의 곱은 얼마인지 계산하는 프로그램을 작성해보자. 문제 분석 숫자들을 받아서 최댓값을 기준으로 .. 2023. 8. 27.