Processing math: 100%
[BOJ/Python] 1439번: 뒤집기 || 그리디, 문자열
·
🎯PS
백준 1439 뒤집기 파이썬 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 더보기 ❍ 문제 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2..
[Algorithm/Python] 위상 정렬(Topology Sort)란?
·
🎯PS/Algorithm
들어가며본 포스팅에서는 위상 정렬에 대해 소개합니다.📌 위상 정렬이란?위상 정렬(Topology Sort)이란 방향 그래프의 모든 노드를 방향성을 모두 지키며 순서대로 나열하는 것을 의미합니다. 특정한 노드로 들어오는 간선의 개수를 진입차수라 합니다. 1️⃣ 진입차수가 0인 노드를 큐에 담습니다. 2️⃣ 큐가 비어있을 때까지 다음의 과정을 반복합니다. - 1 ) 큐에 담긴 노드를 꺼내어 해당 노드에서 출발하는 모든 간선을 그래프에서 제거합니다. - 2 ) 진입차수가 0인 노드를 큐에 담습니다. 모든 원소를 방문하지 않았는데 큐가 비었다는 것은 사이클이 발생했다는 것을 의미합니다. 큐에 담기는 노드가 2개 이상인 경우, 위상 정렬된 후의 결과가 여러 개일 수 있습니다. 1. 진입차수가 0인 노드 1을 큐에..
[Algorithm/Python] 크루스칼 알고리즘이란? || 최소 신장 트리
·
🎯PS/Algorithm
들어가며본 포스팅에서는 신장 트리에 대해 그리고 최소 신장 트리 알고리즘인 크루스칼 알고리즘에 대해 소개합니다. 📌 신장 트리란?신장 트리(Spanning Tree)란 하나의 그래프가 있을 때, 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 말합니다.예를 들어 위와 같은 그래프가 존재한다고 할 때, 아래의 경우는 신장 트리인지를 확인해보겠습니다. 이 그래프는 노드 1을 포함하고 있지 않기 때문에 신장 트리에 해당하지 않습니다. 이 그래프는 모든 노드를 포함하고 있지만, 사이클이 존재하므로 신장 트리에 해당하지 않습니다. 이 그래프는 모든 노드를 포함하고 있으며, 사이클이 존재하지 않으므로 신장 트리에 해당합니다. 신장 트리의 노드 개수와 간선의 관계를 보면, 노드의 개수가 5개일 때, 간선..
[Error] h2-console 403 오류 해결
·
🍀 Spring Boot
들어가며Spring에서 MariaDB를 사용해오다가, 최근에 친구와 H2로 DB를 사용하는 과정에서 403 오류가 계속 발생하였다. 이 문제를 간단하게 해결하는 과정을 포스팅해본다..!📌 h2-console 403 오류 해결프로젝트를 실행한 후, h2-console로 접근 시, 403 오류로 DB를 열어볼 수가 없었다. 이를 해결하기 위해 SecurityConfig 클래스를 살펴보았다. "/h2-console/**"로 다른 api처럼 permitAll을 해주어도 해결되지 않았고,, 다음과 같이 설정해주니 해결되었다. @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http, AuthenticationConfiguration authen..
[Algorithm/Python] 서로소 집합(Disjoint Sets) 알고리즘이란?
·
🎯PS/Algorithm
들어가며본 포스팅에서는 서로소 집합과 구현 방식에 대해 소개합니다.📌 서로소 집합이란?서로소 집합(Disjoint Sets)란 공통 원소가 없는 두 집합을 의미합니다. 예를 들어 {1, 2}와 {3, 4}는 서로소 관계이지만, {1, 2}와 {2, 3}은 서로소 관계가 아닙니다. 서로소 집합 자료구조는 union과 find라는 2개의 연산이 이루어집니다. union(합집합)이란, 하나의 집합으로 합치는 연산을 의미하며, find(찾기) 연산은 특정 원소가 어느 집합에 속하였는지를 찾아내는 연산입니다. 1️⃣ union(합집합) 연산을 통해, 서로 연결된 두 개의 노드를 확인합니다. - 1 ) 노드 A와 노드 B의 루트 노드인 A'와 B'를 찾습니다. - 2 ) 루트 노드 A'를 루트 노드 B'의 부모 노..
[Algorithm/Python] 플로이드 워셜 알고리즘이란?
·
🎯PS/Algorithm
들어가며 본 포스팅은 플로이드 워셜 알고리즘에 대해 소개합니다. 📌 플로이드 워셜 알고리즘 플로이드 워셜(Floyd-Warshall) 알고리즘이란, 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 사용하는 알고리즘입니다. 기존에 소개된 다익스트라 알고리즘에서의 최단 거리 테이블에서 거리가 가장 짧은 노드를 탐색해야 했던 과정을 생략할 수 있다는 점이 차이점입니다. 모든 노드가 다른 노드로 가는 최단 거리의 정보를 2차원 리스트에 담아 저장합니다. 노드의 개수 N만큼 점화식에 맞게 2차원 리스트를 갱신하므로 다이나믹 프로그래밍으로 볼 수 있습니다. ☑️ 시간 복잡도 모든 최단 경로를 2차원 리스트에 담아 처리하므로 매번 O(N2)의 시간이 소요되며, 노드의 개수 N만큼 $O(N..
[Algorithm/Python] 다익스트라 최단 경로 알고리즘이란? || dijkstra
·
🎯PS/Algorithm
들어가며본 포스팅에서는 다익스트라 최단 경로 알고리즘에 대해 소개합니다.📌 다익스트라 최단 경로 알고리즘이란?다익스트라 최단 경로 알고리즘이란, 가장 짧은 경로를 찾기 위한 알고리즘으로, 음의 간선(0보다 작은 값을 가진 간선)이 없을 때에 적용할 수 있는 알고리즘입니다. 1️⃣ 출발 노드를 설정합니다.2️⃣ 최단 거리 테이블 초기화(무한으로 설정)합니다.3️⃣ 방문하지 않은 노드 중에 최단 거리 테이블에서 최단 거리가 가장 짧은 노드를 선택합니다.4️⃣ 선택한 노드를 거쳐 다른 노드로 가는 거리를 계산합니다.5️⃣ 계산된 거리가 최단 거리 테이블의 거리보다 짧을 경우, 갱신합니다.6️⃣ 위의 3️⃣4️⃣5️⃣를 반복합니다.  가장 최단 거리의 노드를 선택하여 주변 간선을 확인합니다. 더 짧은 거리가 ..
[Algorithm/Python] 이진 탐색(Binary Search)란?
·
🎯PS/Algorithm
들어가며 본 포스팅에서는 순차 탐색(Sequential Search)과 이진 탐색(Binary Search)에 대해 소개합니다. 📌 순차 탐색이란? 순차 탐색(Sequential Search)이란, 특정 데이터를 찾기 위해 앞에서부터 차례대로 값을 비교해나가는 탐색 방식입니다. 1️⃣ 가장 첫 번째 데이터를, 찾고자하는 데이터(타겟)과 비교합니다. 2️⃣ 값이 서로 일치하지 않는다면, 다음 데이터로 이동하여 비교합니다. 3️⃣ 이를 반복하며 일치할 때, 탐색을 종료합니다. ✅[ CODE ] def sequential_search(n, target, arr): for i in range(n): if arr[i] == target: return i + 1 i + 1 번째의 데이터가 타겟과 동일하다는 결과를 ..
[Spring] Exception 처리 과정 || ErrorCode, CustomException, ControllerAdvice
·
🍀 Spring Boot
❏ ErrorCodeErrorCode는 Enum 타입으로, 반복적으로 사용되는 Error 상태와 메시지를 포함합니다. Enum 타입으로 미리 에러코드와 메시지를 정의해두며, 편리하게 활용합니다.@Getter @RequiredArgsConstructor public enum ErrorCode { INVALID_TOKEN(401, "Token이 유효하지 않습니다."), ACCESS_DENIED(403, "접근 권한이 없습니다."), MEMBER_NOT_FOUND(404, "존재하지 않는 회원입니다."), AUTHENTICATION_FAILED(400, "아이디 또는 비밀번호가 옳지 않습니다."), BOARD_NOT_FOUND(404, "존재하지 않는 게시물입니다."), BOARD_AUTHOR_MISMATCH..
[Error] unable to evaluate the expression method threw 'org.hibernate.lazyinitia
·
🍀 Spring Boot
📌 오류 발생 원인Member member = memberRepository.findById(Long.valueOf(memberId)) .orElseThrow(() -> new UsernameNotFoundException("존재하지 않는 계정입니다.")); Authentication authentication = jwtProvider.getAuthentication(member);먼저, memberRepository에서 findById를 통해 Member(회원) 엔티티를 조회해온다. public Authentication getAuthentication(Member member) { MemberContext memberContext = new MemberContext(member); return new..