전체 글 276

백준 1976번 : 여행 가자 [자바]

🧫 문제 분석 ✔️ 출처여행 가자 골드 4 📖 문제 서로소 집합 또는 BFS-DFS 알고리즘 둘중 하나로 풀 수 있는 문제다. 주어진 섬들을 여행 시작점을 출발로 탐색해서여행 계획 섬들을 전부 방문했는지만 따지면된다.  서로소 집합의 경우 여행 계획 섬들의 부모가 모두 같으면 여행 가능하다. 🔅 문제 풀이 [BFS]import java.io.*;import java.util.*;public class Main { static boolean[] visited; static boolean[][] graph; // 방문한 곳을 여행 계획에서 체크하면 된다. // 여행계획 섬을 방문하지 않았다면 이는 불가능한 것 public static void main(String[] args..

백준 9935번 : 문자열 폭발 [자바]

🧫 문제 분석 ✔️ 출처문자열 폭 골드 4 📖 문제 문제에 나온대로 반복해서 삭제 시도 --- 메모리, 시간 초과Stack으로 풀어보면 되지 않을까 싶어서 Stack으로 풀었다.  그리고 바로 더 좋은 방법이 있나 생각해봤는데 StringBuilder에 문자 하나씩 넣고 폭발 문자 끝단어와 현재 탐색하는 단어가 같으면 폭발 문자가 있을 가능성이 있으므로 StringBuilder.length - 폭발문자 길이 부터 끝까지를 추출해서 폭발 문자와 같은 지 확인하고 맞다면 삭제하는 식으로 하면된다.  🔅 1차 Stack 문제 풀이 (600ms)import java.io.*;import java.util.*;public class Main { public static void main(String[]..

baekjoon/String 2025.03.15

JWT(Json Web Token)

1. 정의JWT(JSON Web Token) : JSON 기반의 토큰 인증 방식 보안이 필요한 시스템에서 사용자 인증 및 정보를 안전하게 교환하거나세션을 사용하지 않는 무상태(stateless) 인증 시스템 에서 주로 사용 - 별도의 세션 저장소 강제 X   2. 구조JWT는 . 으로 구분된 세가지 부분으로 구성된다. Header.Payload.Verify_Signature(서명) Header 서명 알고리즘 (HMAC SHA256, RSA 등을 사용)토큰의 타입Payload Claim에 대한 property를 key-value 형태로 저장Claim은 일반적으로 사용자 정보 및 토큰에 대한 정보를 포함SignatureHeader와 Payload를 조합한 후 비밀키를 이용해 해싱한 값 해당 서명으로 토큰 위..

Back-End/Spring 2025.03.15

백준 2179번 : 비슷한 단어 [자바]

🧫 문제 분석 ✔️ 출처비슷한 단 골드 4 📖 문제  문자열 정렬 문제다. 급한 마음으로 하니 안풀리다가 생각을 정리하고 설계한다음 풀어보니 바로 풀렸다.O(n^2)으로 풀 수 없을 것 같아서 입력받은 단어들을 저장한 배열과 사전순으로 정렬한 리스트를 만들고, TreeSet으로 풀었다. 주어진 단어들의 접두사 (단어 앞부분 공통적으로 나타나는 부분문자열)가 최대가되는 두쌍을 찾아야한다.  문제는 접두사 길이가 최대인 경우가 여러개일때 앞 인덱스에 있는 쌍을 출력해야한다는 것이다. 따라서 사전순으로 정렬한 리스트를 돌면서 i, i+1 번째 단어의 접두사 길이를 탐색하고, 접두사의 길이가 max 보다 길다면 이전의 max길이였던 단어들을 모두 제거하기 위해 TreeSet을 초기화하고새롭게 갱신하게 해준 ..

baekjoon/String 2025.03.14

JDBCTemplate

✔️ JdbcTemplateSQL 직접 사용시 JDBCTemplate는 매우 좋다.spring-jdbc 라이브러리에 포함, 별도의 복잡한 설정 없이 바로 사용 가능 반복 문제 해결 템플릿 콜백 패턴 사용개발자는 sql 작성, 전달 파라미터 정의, 응답 값 매핑만 하면 된다. 반복 문제?커넥션 획득statement 를 준비하고 실행결과를 반복하도록 루프 실행커넥션 종료, statement, resultset 종료트랜잭션 다루기 위한 커넥션 동기화예외 발생시 스프링 예외 변환기 실행  단점 : 동적 SQL 해결 어려움  종류JdbcTemplate :  기본이며 순서대로 바인딩  (where name = ?) NamedParameterJdbcTemplate : 이름 지정 바인 (where name = :use..

Back-End/Spring 2025.03.13

백준 19941번 : 햄버거 분배 [자바]

🧫 문제 분석 ✔️ 출처햄버거 분배 실버 3 📖 문제 앞의 사람이 가장 왼쪽 즉,  거리가 먼 것 부터 먹어줘야 뒤에 사람이 선택지가 늘어난다. 따라서 앞의 사람이 현재 위치-k ~ 현재 위치 + k 까지 탐색해서  앞쪽에 있는 아직 안먹은 햄버거가 있다면 먹는다.  쉬운 문제인데 이런 유형을 까먹을까봐 기록함으로써 이해한다.  🔅 문제 풀이import java.io.*;import java.util.ArrayList;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRead..

baekjoon/Greedy 2025.03.13

백준 14719번 : 빗물 [자바]

🧫 문제 분석 ✔️ 출처빗물 골드 5 📖 문제 좀 헤맸던 문제다. 높이가 같거나 큰 것 중 작은 거를 기준으로 빗물을 담으면 되는데뭐를 기준으로 할 지가 문제였고, 높이가 줄어드는 형태에서도 문제였다.예제의 4 1 1 2 이 줄어드는 형태다. 각 블록을 기준으로왼쪽 오른쪽으로 같거나 큰 것을 찾는 거로 할려다가 중복 문제가 있어서 깔끔하게 버리고 왼쪽에서부터 기준을 잡고 오른쪽 포인터를 움직이면서왼쪽 포인터의 실제 값보다 작으면 스택에 담아두고 오른쪽 포인터의 실제값이 왼쪽보다 크거나 같으면  왼쪽 값과 오른쪽 값중 더 작은 것을 min값으로 설정하고스택에 넣었던 작은 블록들을 꺼내서 min - stack.pop() 한 값을 answer에 누적합한다.  문제는 높이가 줄어드는 형태인데이 경우 스택을 ..

baekjoon 2025.03.13

백준 13305번 : 주유소 [자바]

🧫 문제 분석 ✔️ 출처주유소 실버 3 📖 문제 그리드(탐욕법) 문제로 매우 간단하다. 근데 가끔식 주어진 입력의 크기를 제대로 안봐서 놓치는 경우가 허다하다.  항상 지금 쓰려는 자료형이 적합한지 생각해야한다. 여기서는 리터랑 가격이 최대 10억, 도시 거리가 최대 10억이므로 long 타입으로 계산해주는것이 좋다.  주유소 가격의 최솟값을 도시를 지날때마다 갱신하면서구한 최솟값 * 거리 로 비용을 구한다.  예제 1번을 보면 처음 도시에서는 무조건 충전해야하므로 다음 도시까지 이동하는 최소한의 기름만 충전한다.2L충전 (5 * 2원) 다음 도시에서 이전 도시와 기름값을 비교해서 더 작다면 최솟값을 바꾸고 다음 거리만큼 주유한다.3L(2 * 3) 그 다음 도시에서는 이전 도시보다 비싸므로 이전 도시..

baekjoon/Greedy 2025.03.10

백준 20437번 : 문자열 게임 2 [자바]

🧫 문제 분석✔️ 출처문자열 게임 2 골드 5 📖 문제 주어진 문자열의 알파벳의 위치 처리 문제다.  처음에는 투포인터로 하면 되겠나 싶었는데 말이 안되는 반례가 너무많이 생각나서 이 방법은 버리고, 각 알파벳의 ASCII 코드에서 'a'의 ASCII 코드를 빼서 0~25 범위의 인덱스로 변환한 후,배열(ArrayList[] list)의 해당 인덱스에 현재 문자열에서 해당 알파벳이 등장한 위치(인덱스)를 저장했다. 그리고 각 알파벳이 k개 이상이면k개씩 묶어서 거리를 구한 후 max, min 값을 갱신했다. 예제를 예시로w = "abaaaba" k = 3 일때list[0] = [0, 2, 3, 4, 6]; // 0 = 'a'알파벳 - 'a' 로 얻은 a알파벳의 인덱스 list[1] = [1, 5]..

baekjoon/String 2025.03.09

백준 9017번 : 크로스 컨트리 [자바]

🧫 문제 분석 ✔️ 출처크로스 컨트리 실버 3 📖 문제 등수 관련 문제 한 팀에 6명이 출전 , 6명이 안되면 점수 제외결승전 통과한 순서대로 점수를 받는다.각 팀의 4번째 선수까지 팀점수로 계산된다.가장 낮은 점수 팀이 우승이며 , 동점일경우 팀의 5번째 선수의 점수가 더 낮은 팀이 우승하게 된다.   로직은 쉽게 짰는데 map을 초기화해주는걸 까먹어서 이상한데서 자꾸 틀리다가 출력 찍어보니까 알았다...ㅋㅋ여러개의 테스트 케이스가 들어올때는 항상 조심하자..🔅 문제 풀이import java.io.*;import java.util.*;public class Main { // 1팀 = 6명 (상위 4명 점수 합) // 결승점을 통과한 순서대로 점수 받음 // 가장 낮은 점수 팀이 우..

baekjoon 2025.03.08