본문 바로가기

전체 글669

백준 16713 Generic Queries (JAVA 자바 풀이) 백준 16713 Generic Queries (JAVA 자바 풀이) 누적합 배열은 구간합 연산 뿐 아니라 R -> L 사이의 연산을 제거하여 복원 작업이 가능한 다른 연산에 대해서도 가능하다. XOR 연산 역시 이전에 구한 합이 다음 합으로 연결되므로 구간XOR 배열로 구성할 수 있고 슬라이스된 범위에 대해서도 구간합을 구하는 것과 같은 로직으로 구할 수 있다. 이를 수식화 해보면 XOR(arr[L], arr[R]) = acc[R] - acc[L-1] 구간 XOR 배열을 다음과 같이 구한다. int[] numbers = new int[N + 1]; int[] Snumbers = new int[N + 1]; for (int i = 1; i 2023. 7. 1.
백준 2910 빈도 정렬 (JAVA 자바 풀이) 백준 2910 빈도 정렬 (JAVA 자바 풀이) 문제의 조건을 요약해보면 다음과 같다. 정렬을 하되, 1) 더 많이 숫자가 앞에 오도록 2) 등장 횟수가 같으면 먼저 등장한 숫자가 앞에 오도록 두 번째 조건 때문에 까다로워진 문제이다. 카운트를 배열을 이용해 구하는 방식 중 하나는 인덱스의 카운트를 올리는 방식이다. 이 방식을 사용하면 비교적 간단하게 풀이가 가능하지만, 10억이 넘어가는 C의 범위 때문에 반드시 메모리 초과가 날 것이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; im.. 2023. 7. 1.
백준 1302 베스트셀러 (JAVA 자바 풀이) 백준 1302 베스트셀러 (JAVA 자바 풀이) 중복되는 값을 찾는 로직을 사용하면 시간 복잡도가 급격하게 올라간다. 검색 수행을 hash로 한다면 O(n^2)은 피할 수 있고 또 시간도 넉넉하기 때문에 그렇게 해도 풀릴 수 있지만 정렬의 특성을 이용하면 보다 간단하게 풀 수 있다. 즉, 정렬이 된 후에 값들이 한 곳으로 모여 있게 된다는 특성을 이용한다. 예를 들어 아래와 같은 데이터를 받아서 정렬하면 9 table chair table table lamp door lamp table chair [chair, chair, door, lamp, lamp, table, table, table, table]로 정렬된다. 이러한 값들에 대해서 하나씩 카운팅을 해주면 한 번의 반복문으로 카운팅을 완료할 수 있으.. 2023. 6. 30.
[독서 기록] 아주 작은 습관의 힘, 제임스 클리어 지음, 이한이 옮김, 비즈니스 북스 아주 작은 습관의 힘 단계적이고 체계적인 자기계발 방법을 찾는 사람들을 위한 『아주 작은 습관의 힘』. 고교 시절 촉망받는 야구선수였던 저자는 연습 중 동료의 야구 배트에 얼굴을 정통으로 강타당하는 큰 사고를 당했고, 걸을 수조차 없었던 저자는 절망에 빠지는 대신 지금 당장 할 수 있는 아주 작은 일이라도 찾아 그것을 반복하자고 마음먹었다. 그 후 매일 걷기 연습을 해서 6개월 만에 운동을 할 수 있게 되었고, 6년 후에는 대학 최고 남자 선수가 되었다. 그 후 자신을 인생의 나락에서 구해준 아주 작은 습관의 힘을 전 세계에 알리는 최고의 자기계발 전문가가 된 저자는 이 책에서 자신의 생생한 경험과 생물학, 뇌과학, 심리학의 최신 연구 결과를 집약해서 습관 하나로 인생을 변화시킬 수 있는 노하우를 제시한.. 2023. 6. 29.
도메인 주도 개발 방법론(DDD)을 적용하여 3티어 아키텍처를 변경해보자 0. 배경 스프링 부트로 개발을하면서 어떻게 하면 결합도는 낮추고 응집도는 높이는 코드를 짤 수 있을까 하는 고민을 한다. 프로젝트를 하면서 MVC 패턴을 이용하는 것은 익숙했다. 하지만 보다 좋은 설계에 대한 갈증 같은 것이 항상 있었다. 엔티티 간의 연관관계가 복잡해지고 참조 Depth가 깊어질 때마다 내가 하는 이 방식이 맞는건가 하는 생각이 자주 들곤 했다. 서비스가 비대해지는 것도 문제였지만 특히 서비스와 서비스가 서로 참조관계를 맺는 것도 불편했다. 또 서비스라고 부르기에는 좀 애매한데 그렇다고 서비스가 아니라고 하기는 좀 뭐한 기능 클래스들이 있었다. 예를 들어 다음과 같은 PaginationService이다. 이에 대해서도 적절한 네이밍을 설정하고 레이어를 맞춰주는 것이 힘들었다. 이에 .. 2023. 6. 26.