분류 전체보기 36

[주통기] DBMS 패스워드 확인 함수 취약점 진단 쿼리 문제 해결

※ 해당 게시글은 AWS RDS Oracle 환경을 기반으로 작성되었습니다 주통기 취약점 가이드를 기반으로 DBMS 취약점을 진단하던 중, 가이드의 패스워드 확인 함수 관련 쿼리가 올바르게 작동하지 않는 다는 것을 발견하였다. 이 포스트는 위 오류를 발견한 과정과 올바른 쿼리에 대한 설명이다. 사용자 패스워드 사용기간 및 복잡도 취약점 이 취약점은 패스워드의 사용 기간 및 복잡도 설정 유무를 점검하여 비인가자의 패스워드 추측 공격으로 인한 DB 접근 위험에 대비가 되어있는지 확인하기 위해 점검한다. SELECT PROFILE, RESOURCE_NAME, LIMITFROM DBA_PROFILESWHERE RESOURCE_NAME IN ( 'FAILED_LOGIN..

보안 2025.11.14

[JAVA 알고리즘] Do it! 알고리즘 코딩테스트 자바편 책 후기!

분명 올해 초까진 백준도 꾸준히 풀며 코딩 테스트 준비를 해왔었다... 하지만 4학년 학과 수업에 치여살다보니 자연스럽게 백준에 손을 놓아 버렸고 그나마 조금 생겼던 코딩 테스트에 대한 자신감이 0이 되어버렸다. 그러던 중 올해 초 첫 코테 공부를 할 때, 인프런 강의로 매우 도움을 받았던 Do it! 알고리즘 코딩 테스트 책이 개정판으로 새로 출판되어 서평단을 모집한다길래 냉큼 신청했다. 인프런 강의를 통해 공부를 할 때, 강의 내용으로는 조금 부족하다는 느낌을 받았고 문제 수도 생각보다 적어서 아쉬웠다. 이번 개정판에서는 무려 103제의 유형이 실려 있고, 앞서 말한 것처럼 영상도 있기 때문에 코딩 테스트 입문자들도 어렵지 않게 공부할 수 있다. 코딩 테스트 입문자들이 자칫 놓칠 수 있는 시간..

대외활동 2025.07.21

[JAVA/알고리즘] TreeMap 트리 맵 (백준 7662)

1) TreeMap 이란TreeMap이란 이진트리를 기반으로 한 Map 컬렉션이다.   위 사진처럼 레드-블랙 트리로 구현되어 있어기본적으로 TreeMap에 객체를 삽입하면, key값을 기준으로 오름차순 정렬되어 저장된다.  TreeMap은 HashMap보다 추가, 삭제 시간이 오래 걸린다.  HashMapTreeMap조회 평균 :  O(1) / 최악 : O(n)O(log n)추가평균 :  O(1) / 최악 : O(n)O(log n)삭제평균 :  O(1) / 최악 : O(n)O(log n)  2) TreeMap의 Methodimport java.io.IOException;import java.util.*;public class Main { public static void main(String[] ..

개발 언어/JAVA 2025.04.09

[JAVA/알고리즘] 최대 힙 (백준 11279)

Java에서 Heap은 PriorityQueue를 활용하여 쉽게 구현할 수 있다.  최대 힙은 root에 최댓값이 최소 힙은 root 최솟값이 저장되어 있는 이진 트리라고 생각하면 된다. 기본적으로 Java에서 PriorityQueue는 최소힙으로 구현되어 있다.  // 최대 힙PriorityQueue maxHeap = new PriorityQueue(Collections.reverseOrder());// 최소 힙PriorityQueue minHeap = new PriorityQueue(); Collections.reverseOrder()을 이용하여 최대 힙으로 구현 가능하다.   [백준 11279]간단한 최대 힙 구현 문제이다. import java.io.BufferedReader;import java..

개발 언어/JAVA 2025.03.24

[JAVA/알고리즘] 백준 2579 계단 오르기 (DP)

Dynamic Programming 동적 계획법으로 해결 할 수 있는 문제이다. DP 문제는 Top-down (재귀 함수), Down-up (반복문) 두 가지 방식으로 해결할 수 있다.   아무점수가 없는 바닥을 step[0]이라고 하였을 때,  계단이 n개 일 때 얻을 수 있는 점수의 최대값은1) 계단이 n-2개일 때 얻을 수 있는 점수의 최대값 +  n번째 계단의 점수 2) 계단이 n-3개일 때 얻을 수 있는 점수의 최대값 + n-1번째 계단 점수 + n번째 계단의 점수두 가지 경우의 수 중 더 큰값이다.  1)의 경우 n-1번 째의 계단을 뛰어넘었고2)의 경우 n-2번 째의 계단을 뛰어넘었으므로 3번 연속된 계단을 밟지 않는 조건을 만족한다.    [Top-down] 재귀함수 이용public cla..

개발 언어/JAVA 2025.03.17

[JAVA/알고리즘] 너비 우선 탐색 BFS (백준 14940)

너비 우선 탐색 BFS란, 시작 정점을 방문한 수 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지 않은 모든 정점들에 대해서 너비 우선 탐색 적용. Queue를 사용하여 구현 // 그래프 표현 (다른 자료형을 이용할 수도 있음)private static ArrayList> graph;// 깊이 표현private static int[] visited;private static void BFS(int now) { Queue queue = new LinkedList(); visited[now] = 1; while (!queue.isEmpty()) { now = queue.poll(); // now에 인접한 모든..

개발 언어/JAVA 2025.03.06

[JAVA/알고리즘] HashSet clear()와 removeAll() 메모리 (백준 1697)

위의 문제를 HashSet을 이용하여 해결하였다.  이 과정에서 메모리 초과로 인한 실패가 나왔었는데 그 이유는 HashSet의 clear() 함수 때문이었다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt..

개발 언어/JAVA 2025.03.05

[JAVA/알고리즘] 분할 정복 알고리즘 Divide and conquer (백준 2630)

분할 정복 알고리즘이란, 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법. 보통 재귀 함수로 구현 1. Divide 원래 문제를 분할이 가능할 때까지 더 작은 하위 문제로 분할2.  Conquer각 하위 문제를 재귀적으로 해결3. Combine해결한 하위 문제들을 통합하여 원래 문제를 해결 장점 : Top-down 재귀방식으로 구현하여 코드가 직관적. 문제를 나누어 해결하여 병렬적으로 문제 해결단점: 재귀 함수 호출로 오버헤드 발생할 수 있음. 스택에 많은 데이터가 보관되면 오버플로우 발생 [백준 2630] 색종이 만들기전체 종이가 같은 색으로 칠해져 있도록 색종이의 한 변의 길이를 2로 1이 될 때까지 나누어 각 색의 색종이의 개수를 구하는 문제 import java.io.Bu..

개발 언어/JAVA 2025.03.03

[JAVA/알고리즘] 동적 계획법 Dynamic Programming (백준 1463)

동적 계획법 Dynamic Programming (DP) 란, 하나의 큰 문제를 여러 개의 작은 문제로 나누어 그 결과를 저장 후 큰 문제를 해결하는 방법 작은 문제의 답을 저장 (메모이제이션) 후 재활용  조건1. 겹치는 문제 (Overlapping Subproblems) : 동일한 작운 문제들이 반복되는 경우2. 최적 부분 구조 (Optimal Substructure) : 부분 문제 최적값을 사용하여 전체 문제 최적값 구할 수 있는 경우 구현 방식 1. Top-Down (Memoization) : 재귀함수를 사용하여 구현2. Buttom-Up (Tabulation) : 반복문을 사용하여 구현   [백준 1463] 1로 만들기1. Top-Down 방식 (재귀함수) import java.io.Buffer..

개발 언어/JAVA 2025.03.01

[JAVA/알고리즘] 집합 HashSet (백준 11723)

Java에서 집합을 표현하는 자료형은 HashSet, TreeSet, LinkedHashSet 등이 있다. Set은 순서가 없고 중복을 허용하지 않음.  HashSet : 중복 없이, 순서 없이 요소 저장. 가장 많이 사용TreeSet : 중복 없지만 순서가 있는 set  add() : 집합에 값 추가 (중복의 경우, 추가 되지 않음)addAll() : 값을 한번에 여러 개 추가.remove() : 집합에서 값 제거. 집합에 값이 존재하는 경우 true, 아닌 경우 false 반환clear() : 집합의 모든 값 제거contains() : 값이 집합에 존재하면 true, 아니면 false 반환size() : 집합의 크기, 원소의 개수 반환  교집합 : retianAll()import java.util.*..

개발 언어/JAVA 2025.02.27