\

전체 글

스프링부트, 아키텍쳐, 알고리즘
태그예외처리센티넬 기법(조건 범위를 활용한 예외처리)구현풀이 1 (일반 구현)문제에서 표현하는 대로 문제를 풀고자 하면 아래와 같은 다이어그램 흐름대로 해결하게 된다.아래는 위의 다이어그램의 Mermaid 코드이다.graph TD B --x |X 이전 문제를 해결하지 못함|A A[2] --> |O|B[-1] A --> |O|ㅁ[3] A --x |X 이전 해결 시간보다 짧을 수 없음|ㅊ[1]  아래는 문제풀이 코드이다.static void solve() throws Exception { int iter = scan.nextInt(); int sincerityTeamCount = 0; for (int i = 0; i solveTime && solveTime > -1) || (c..
태그bfs / dfs클러스터링클러스터링 - 개수세기특징단순 클러스터링(개수세기) 유형이다.행렬 내 모든 방문하지않은 요소에서 시작한다.하나의 클러스터를 이루는 같은 요소들의 개수를 세고 방문처리한다.static char[][] board;static boolean[][] visited;static int[] dirx = {0, 0, -1, 1};static int[] diry = {1, -1, 0, 0};static void solve() throws Exception { int n = scan.nextInt(); int m = scan.nextInt(); board = scan.nextCharMatrixFromString(m, n); visited = new boolean[m][n]; Map stren..
태그고유순열(UniquePermutation)특징순열 문제이며, 주목해야 할 점이 2가지가 있다.인접한 알파벳이 다른 알파벳이여야만 한다.순열의 결과는 중복될 수 없다.순열의 결과를 출력할 필요는 없다. 경우의 수만 계산할 수 있으면 된다.잘못된 접근방법-1첫 접근방식으로 우선 기본적인 순열 코드를 작성하여 모든 문자를 순회하고나서 인접한 알파벳이 모두 다른 알파벳인지 검사했는데, 시간복잡도 로는 최대 10! 의 연산이 필요하여 문제 없을거라고 생각했다.하지만 중복된 결과를 제거해야 하기 때문에 불가피하게 Set 을 사용하여 중복제거 로직을 작성한 결과 메모리 초과로 실패했다.static String str;static boolean[] visited2;static Set luckyStringSet = ..
· 알고리즘
태그브루트포스이분탐색 ← 오해할 수 있음특징알고리즘 문제를 적당히 접해본 상황에서 이 문제를 본다면 가장 먼저 이분탐색이 떠오르기 쉬운(이분탐색 유형으로 오해할 수 있는) 문제이다. 문제에서 최대 수익을 계산하는데 중요한 매개변수와 그 결과는$ y(L) = L에 대한 총 수익, L = 일정한 나무의 길이(매개변수) $ 이분탐색으로 문제를 해결할 수 있으려면 이러한 상황일때 L 이 증가/감소하면서 y가 한쪽 방향으로만 증가하거나 감소해야한다. 수식으로 표현하면 아래와 같다.$ ∀L1,L2∈R,L1 이분 탐색은 일반적으로 함수가 단조증가 or 단조감소할 때, 즉 정렬된 배열 내에서 특정 조건을 만족하는 임계값을 찾을 때 사용 가능하므로, 이 문제에 적용할 수 없다.또한, 자르는 나무의 최대 길이가 10,00..
태그기하학수선의 발반직선특징수선의 발을 구하면 풀리는 간단한 문제가 아닌, 수선의 발이 철도의 경로내에 존재하는지 까지 고려해야하는, 즉 수선의 발, 선분위의 점 의 2개의 개념이 필요한 문제이다.아래의 Mermaid 다이어그램으로 요약이 가능하다.아래는 위의 Mermaid 다이어그램 코드이다.graph TD 수선의발 --> 경로{철도경로 내에존재} 경로 -->|YES|B[수선의발이 최단거리지점] 경로 -->|NO|A[출발점이 최단거리지점]코드나의 경우는 반직선, 수선의 발에 대한 개념을 객체화로 해결하려고 했으나, 사실 이 문제를 풀기위해서는 이렇게까지 복잡한 구현이 필요없긴하다…*** 문제에서 사용된 메서드만 표현해서 아래와 같은 구현이 불필요해 보일 수 있지만, ..
서병렬
서병렬 개발