분류 전체보기 279

백준 1389번 : 케빈 베이컨 6단계 법칙 [자바]

🧫 문제 분석 ✔️ 출처케빈 베이컨 6단계 법칙 실버 1 📖 문제 어디서 많이 봤던 문제촌수 따지는 문제랑도 비슷한 것 같다. 다른점은 모든 사람들의 케빈 베이컨 지수 중 가장 작은 지수를 가진 사람을 찾는 것즉, 모든 사람에 대한 모든 사람의 최단거리, 플로이드 와샬 알고리즘을 쓸 수 있다. BFS로 그냥 풀어도 된다.  🔅 문제 풀이 (플로이드 와샬)import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in..

백준 1034번 : 램프 [자바]

🧫 문제 분석 ✔️ 출처램프 골드 4 📖 문제  예전에 못풀었다가 정말 잊혀질때 쯤, 바로 오늘 풀게되었다.알고리즘 분류는 브루트 포스지만 나는 그리디 알고리즘이라고 생각한다.  처음 시도때 생각없이 브루트 포스로 모든 경우의 수를 해봤었는데 당연히 시간초과났다. 이번에는 예제를 유심히 보다가 램프 행을 전체적으로 봤을때 똑같은 패턴인 램프 행들이 있었다. 그 패턴들 마다 개수를 저장하고, 개수를 내림차순으로 정렬해서 k번 스위치를 눌렀을 때 가능한지 불가능한지 판별하는 방식으로 짜서 성공했다. 스위치 누름 처리방법가장 많이 나온 패턴이 0001 이라고 하자. 개수는 3개1. 안켜진 상태 즉, 0의 개수를 센다.2. 한 열을 제외한 나머지 0은 다 킨다. (k - 0의 개수 + 1)  (여기서는 01..

baekjoon/Greedy 2025.03.19

백준 4179번 : 불! [자바]

🧫 문제 분석 ✔️ 출처불! 골드 3 📖 문제  BFS로 풀 수 있는 문제로문제에서 탈출구는 끝부분 즉, 행이 0이거나 열이 0 인 곳에 가기만 하면 탈출한다. ....J. //여기서는 8곳이 탈출구이다.....##.J# //여기서는 0,0, 1,0 이 탈출구이다.### 또한 매 분마다 불이 퍼지고, 지훈이도 이동하는데불을 먼저 이동시키고 지훈이를 이동시키면 된다.  불이 퍼졌을 때 불에 대한 방문 체크와 벽 체크지훈이는 방문체크, 불과 벽 체크를 하면서 이동하면 된다.  분마다 퍼진 불들을 큐에 넣고 그 시간에 퍼진 불들만 퍼뜨려야한다. 아니면 시간과 상관없이 전부 퍼진다.  ....F. // 0분 초기상태....F. // 1분 전 1,1에 있는 불 하나가 퍼졌으므로 이 1개에 대한 불을 퍼..

백준 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