철학하는 개발자

있는 것은 있고, 없는 것은 없다.

전체 글 865

개발자 유미 - 스프링 시큐리티 1 : 실습 목표 및 간단한 동작 원리

https://www.youtube.com/watch?v=y0PXQgrkb90&list=PLJkjrxxiBSFCKD9TRKDYn7IE96K2u3C3U&index=1  ⛳ 목표Spring Security를 활용한 인증/인가 구현MySQL을 활용한 회원 정보 저장(영속성)구현 기능인증 : 로그인 기능 구현인가 : 경로별 접근 권한 설정회원가입 : 회원 정보 저장 시큐리티 동작 원리Client의 요청 발생Servlet Container가 요청을 받고 여러 개의 Filter를 거쳐 컨트롤러에 도달Spring Security를 활성화하면 Filter에서 요청을 가로챔Filter에서 인증 인가 확인 후 최종적으로 접근 허용 실습 버전Spring Boot 3.1.5Security 6.1.5Spring Data JPA..

[Notion] 데이터베이스의 모든 최하위 항목 수를 세는 방법(for 노션으로 블로그 만들기)

오늘은 Notion의 데이터베이스 내 모든 최하위 항목 수를 세는 기능을 만들어 보겠습니다. 최하위 항목이란?데이터베이스에서 하위 항목을 가지지 않는 페이지를 의미합니다. 즉 다음 사진과 같이 계층형 구조에서 더 이상 등록된 하위 항목이 없는 페이지를 의미합니다.위 데이터베이스에 존재하는 전체 문서의 수는 총 6개입니다.이 중 하위 항목이 없는 최하위 항목은 총 3개(문서5, 문서3, 문서6)입니다. 이제 ‘수식’과 ‘롤업’을 양방향 참조로 구성해 모든 최하위 항목 수를 계산하는 방법에 소개하겠습니다.empty()로 최하위 항목 표시하기먼저 해당 문서가 최하위 항목인지 파악하기 위한 수식부터 작성해보겠습니다.하위 항목 수라는 이름의 수식 속성을 추가해주고 다음 수식을 입력합니다.if(empty(prop(..

Dev 2025.02.05

[백준 02565] 전깃줄 [Java]

문제https://www.acmicpc.net/problem/2565풀이유명한 LIS 문제다.우선, 전깃줄의 위치 정보를 A 또는 B를 기준으로 정렬하자.A를 기준으로 정렬해보겠다.A에서 B로 가는 전깃줄이 교차하지 않도록 최소한의 전깃줄만 제거해야 한다.교차하지 않는 전깃줄들이 최대가 되기 위해서는 A에서 B로 향하는 전깃줄들이 최대한 촘촘히 위치가 증가해야 한다.즉 B의 LIS가 교차하지 않는 전깃줄의 수와 동일하다.문제에서 요구하는 정답은 제거해야 하는 전깃줄의 수 이므로 N에서 B의 LIS를 뺀 값을 출력하자.소스코드보기

[백준 11000] 강의실 배정 [Java]

문제https://www.acmicpc.net/problem/11000풀이강의실을 최소로 사용해서 모든 강의를 끝내야 한다.강의가 끝나는 대로 다음 강의를 바로 진행할 수 있지만, 강의가 끝나지 않았는데 시작하는 강의가 있다면 강의실이 필요하다.priority queue를 사용해 쉽게 해결할 수 있다.우선, 시작 시간을 기준으로 정렬해주자.다음으로 강의 종료시간을 우선순위 큐에 넣어준다.만약 다음 강의의 시작시간이 가장 빨리 끝나는 강의의 종료시간 이후라면, 가장 빨리 끝나는 강의를 우선순위 큐에서 제거해주면 된다.그렇지 않는 경우라면 계속 우선순위 큐에 넣어주고 마지막에 전체 크기를 출력해주자.소스코드보기

[프로그래머스] 등굣길 [Java]

문제https://school.programmers.co.kr/learn/courses/30/lessons/42898풀이MN크기의 보드에 장애물이 주어지고, (1, 1)에서 (M, N)까지 가는 최단 경로의 수를 1e9 + 7로 나눈 나머지를 출력하는 문제다.보통 좌표가 NM으로 주어지지만 여기서는 MN이다. puddles가 가지는 좌표또한 MN임을 유의하자.puddles에는 BLOCK표시를 해주자.( 0, 1 ) 또는 ( 1, 0 )에 1을 기입해 (1, 1)이 1을 가질 수 있도록 해주자.dp[i][j] : ( i, j )까지 오는 최단 경로의 수이후에는 모든 경로를 탐색하며 장애물이 없는 칸이라면 dp[i][j] = dp[i - 1][j] + dp[i][j - 1]을 통해 최단 경로의 수를 합쳐주자..

PS 2025.02.01

[백준 06243] Mileage Bank [Java]

문제https://www.acmicpc.net/problem/6243풀이주어진 비행 정보에 따라 지급해야 하는 마일리지를 계산하는 문제다.TC의 수는 정해지지 않으며, 0을 입력받으면 각 케이스의 종료를 의미한다. 누적 마일리지를 출력하면 된다.#을 입력하면 프로그램을 종료해야 한다.입력받은 클래스 코드가 F라면 운행 거리의 2배를, B라면 1.5배를 더해주면 된다.이코노미라면 500또는 운행 거리 중 큰 값을 더하면 된다.소스코드보기

[백준 11438] LCA 2 [Java]

문제https://www.acmicpc.net/problem/11438풀이기존에 선형 탐색으로 O(N)만에 LCA를 구하는 방법으로는 이 문제를 해결할 수 없다.2025.01.15 - [PS/Baekjoon Online Judge] - [백준 11437] LCA [Java] [백준 11437] LCA [Java]문제https://www.acmicpc.net/problem/11437풀이DFS를 통해 모든 노드의 부모 노드와, 깊이를 구한 후 LCA를 구하는 기본 문제입니다.이를 위해서 양방향 그래프를 구성해야 합니다.문제에서 트리의 루트는 1kyr-db.tistory.com각 쿼리에 대해 O(logN)안에 LCA를 찾을 수 있는 방법에 대해 알아보자.깊이가 다른 두 노드의 깊이를 맞추고 LCA를 탐색하는 ..

LCA, (Lowest Common Ancestor, 최소 공통 조상)

트리에서 두 노드 u, v의 가장 가까운 공통 조상을 찾는 알고리즘💡공통 조상이란?두 노드가 공통으로 공유하는 조상 노드의 집합= 루트 노트에서 두 노드로 가는 경로가 만나는 노드의 집합 트리에서 LCA를 찾아보자! 1 / \ 2 3 / \ \ 4 5 6 / \ 8 92, 3의 LCA : 18, 5의 LCA : 24, 8의 LCA : 4🔄 동작 원리LCA를 찾는 일반적인 방법은 다음과 같습니다.깊이 맞추기 두 노드의 깊이가 다를 경우, 깊이가 더 깊은 노드를 조상 방향으로 올려 깊이를 맞춥니다.공통 조상 찾기 두 노드가 같아질 때 까지 두 부모를 따라 올라가며 비교합니다.최종 공통 조상 반환 가장 먼저 발견된 공통 조상을 반환합니다...

Algorithm 2025.01.25

[백준 01006] 습격자 초라기 [Java]

문제https://www.acmicpc.net/problem/1006풀이아마 문제 번호가 1006이거나, 알고리즘 분류에 DP밖에 없어서 많은 분들을 낚은(?) 문제입니다.평소 DP를 패턴을 찾아 푸시는 분들이라면 많이 어려울 수 있을 것 같습니다.우선, 특수소대가 구역을 침투하는 방법은 단순합니다.현재 영역과 인접한 영역의 합이 W보다 작다면 둘 다 점령 아니면 현재 영역만 점령하는 방식입니다. 이 문제는 다음과 같이 나눌 수 있습니다.선형 구조를 점령하기 위해 침투 시켜야 할 특구 소대의 최소 수 구하기원형 구조임을 고려해 초기값을 설정하고 다시 선형 구조를 점령하기주어진 영역을 원이 아닌 선형 구조로 표현하고,점령하는 경우의 수는 다음과 같이 3개의 상태로 표현할 수 있습니다.점화식에 대해서는 다음..