[백준] 1351 - 무한 수열(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1351풀이점화식 : DP[N] = DP[N/P] + DP[N/Q] 배열🚫, 반복문🚫메모리 이슈로 배열을 N 크기(최대 10^12)만큼 선언해 두고 사용할 수 없다 😅또한 피보나치를 풀이할 때처럼 DP[N] 계산 시 모든  [1, N]에 대해 값을 채워야 하므로, 연산량이 매우 커진다불필요한 값(사용되지 않는 DP 배열의 부분)까지 계산해야 하므로 비효율적이다.Map⭕️, 재귀 ⭕️따라서 Map을 사용하는 방향을 선택했다.해당 시간 복잡도는 O(1)이기 때문에 배열 접근과 차이가 나지 않을 것이다.이를 탑다운식의 재귀로 풀이해보도록 하자N = 100, P = 50,  Q = 30 를 예로 들어보자.100번째 수 ➡️ [2번째 수 +..
[백준] 1043 - 거짓말(Java)
·
Algorithm
문제 파악진실을 아는 자들이 진실을 퍼트린다고 생각하면 좋다.진실이 다 퍼졌을 때에도 진실을 아는 이가 없는 파티가 있다면, 그 파티에서 지민이는 거짓말을 할 수 있다.풀이큐를 사용하여 풀었으며, 풀이 순서는 다음과 같다.입력으로 주어지는 진실을 아는 사람들을 큐에 넣어준다.큐에서 사람들을 꺼내며, 진실을 아는 사람임을 체크해 준다.진실을 아는 사람들이 참가한 파티를 역추적한다.진실을 아는 사람들이 참가한 파티는 지민이가 거짓말을 할 수 없으므로 답에서 제외한다.해당 파티에 참가한 참석자들을 큐에 다시 넣어준다.이 때, 이미 진실을 아는 사람은 큐에 추가할 필요가 없다. (단계 2에서 체크 했으므로)그렇게 되면 무한으로 사람들을 추가하게 될 것코드import java.io.BufferedReader;im..
[백준] 1099 - 알 수 없는 문장(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1099지문 파악이 어려웠음 흑흑 예시를 참고하여 파악했다 🥹 지문에서는 `문장`을 기준으로 설명하는 반면, `단어` 기준으로 이해하는 것이 내 기준에서는 더 쉬웠다.내 방식으로 정리해 보았다.문장은 주어진 단어 리스트의 단어들로 빠짐없이 구성된다.단어들의 순서를 바꾸는데는 비용이 든다. (ex. ABC -> CBA 변환 시 2번 비용이 발생)이 때 해당 비용이 가장 적게 드는 값을 출력하도록 한다.만일 주어진 단어로 문장을 온전히 구성하지 못하면, -1을 출력한다.단어 리스트의 단어들은 각각 1번 이상 사용 할 수도 있고, 사용하지 않을 수도 있다헷갈렸던 예시 두 개를 적용하며 파악해 보자.[] 내의 입력은 문장이고, 그 이후의 문자..
Spring Cloud Gateway 연동
·
Spring
모듈이 늘고 인증에 대한 중앙화와 라우팅에 대한 필요성을 느껴 Cloud Gateway를 도입해보도록 한다.현재 생태계는 Spring이기 때문에 Spring Cloud Gateway를 도입하였다.각 모듈, API의 독립성을 유지해 주는 점에 있어서는 좋으나,아무래도 요청이 밀집될 수 있기 때문에 Gateway의 부하 분산에 대한 고민이 필요할 것 같다.Spring Version : 3.4.1Java : 17Spring Gateway 환경 설정build.gradleext { set('springCloudVersion', "2024.0.0")}dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' ..
멀티모듈매핑, 결합도 낮추기
·
Spring
멀티모듈은 서비스 레이어를 더 높은 차원에서, 물리적으로 나눈다는 생각이 든다.그렇기에 의존성을 더 고민하고 나누어 놓을 필요가 있어 보인다😇현재 프로젝트는 도메인 별로 모듈을 나누어 놓은 상태인데 고민의 흔적을 남겨 보고자 한다. 모듈 역할들어가기에 앞서 모듈의 책임/역할에 대해 간략히 정리해 보자. 하나의 도메인에 대해 간략하게 두 개의 모듈로 나누어 두었다.api module외부와의 인터페이스 역할을 하며, HTTP 요청을 처리하고 응답을 반환을 처리domain module비즈니스 로직 및 데이터 모델을 관리데이터 처리를 위한 Repository, Entity 등이 위치하며, 비지니스 로직을 다루기 위한 서비스 레이어도 포함한다. 왜 매핑을 고민할까?결론만 말하면 모듈간 의존성을 낮추고자 하기 ..
[백준] 1052 - 물병(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1052 어려운 점정답이 없는 경우 -1을 리턴해야 하는데 이 부분을 신경 쓰느라 규칙을 잡는 중요한 부분을 놓친 게 아닌가 싶다.... 사실 -1이 나올 일이 없다 😅풀이주어진 수들을 2진수로 변환하여 풀도록 한다.높이가 1인 컵을 한 개씩 추가할 때 기존 물컵들이 결합하여 변화하는 양상은 이진수의 연산과 닮아있다.이진수로 변환하게 되면 각 자리수의 1은 차 있는 물컵을 나타낸다 예를 들어 높이가 1인 컵의 개수가 5일 경우에 대해 규칙을 알아보도록 하자5 = 101(2) 즉 2개의 컵이 남는다. (높이가 1인 컵 1개, 4인 컵 1개가 남는 형태)현 상태에서 1인 물컵을 더하게 되면 6 = 110(2)로 바뀐다.(높이가 1인 컵 두..