728x90
⬛ 데이터 조작어 (검색/삽입/수정/삭제) 데이터 검색 : SELECT 문 (= 질의어) SELECT [ALL | DISTINCT] 속성리스트 FROM 테이블리스트 [WHERE 조건] [GROUP BY 속성리스트 [HAVING 조건]] [ORDER BY 속성리스트 [ASC | DESC]] 데이터 삽입 : INSERT 문 기존 테이블에 새 튜플(행) 추가하는 명령어 INSERT INTO 테이블이름(속성 리스트) VALUES (값 리스트); 데이터 수정 : UPDATE 문 UPDATE 테이블이름 SET 속성1=속성값1, 속성2=속성값2, ... [WHERE 조건]; 데이터 삭제 : DELETE 문 DELETE FROM 테이블이름 [WHERE 조건]; → 이 중 ‘데이터 검색’(SELECT문)에 해당하는 SQ..
🟩 4번. 방향 바꾸기 4방향으로 갈수 있기 때문에 cost[][] 2차원 배열 생성하여 최대한 방향 적게 바꾸면서 갈 수 있는 방식 고안 PriorityQueue에 좌표 담아가면서 가중치 적은 거 우선 정렬 int dir 변수가 순서대로 dx, dy 순회하면서 방향 안바꾼 상태로 더 적은 값 갱신 가능하면 갱신 방향 바꾼 상태로 더 적은 값 갱신 가능하면 갱신 정답 출력 package to_0822_6; //다익스트라 - 방향 바꾸기 RE 풀이 import java.util.*; class Solution { static int N, M; static int[][] cost; static PriorityQueue pQ; //4방향 static int[] dx = {0, 0, 1, -1}; static ..
⬛ 그래프 알고리즘 🟩 1번. 최소 비행료 문제 처음에는 one-to-all 단순히 다익스트라로 접근하는 문제인 줄 알았는데, 문제 조건에 있는 정해진 ‘환승 횟수’로 제한되어 있기 때문에 레벨 탐색을 해야 한다. 다익스트라는 우선순위큐로 무조건 최소비용을 구하는 게 단순 목적인데, 여기서 레벨탐색으로 풀어야 각 레벨(거쳐갈) 당 최소 비용이 구해지기 때문에 주의 ditance[c_v]가 아닌, c_val 값으로 거리 처리 해야 답이 나온다 왜지 ? //직전 Q에서 꺼낸 값 c_val 으로 접근해야 한다. for문을 돌면서 내부에서 nx_val 값을 업데이트 하는 중이라 distance[c_v]로만 접근하게 된다면 직전에 뽑아놨던 c_val 값이 아니라 새로 갱신된 distance[c_v]로 접근하게 되..
🟩 4번. 미로의 최단거리 통로 | BFS 레벨 탐색 문제이다. 출발지점 (0, 0)에서 도착점 (6,6) 까지 갈 건데 갈 때마다 lv++처리하여 dist 배열에 해당 방문한 lv들을 담아가며 처리하면 된다. 4방향 탐색할 때 변수 주의해서 사용할 것 package to_0818_2; //미로의 최단거리 통로 import java.util.*; class Solution { static int[][] dist;//거리용 //4방향 static int[] dx = {0, 0, 1, -1}; static int[] dy = {1, -1, 0, 0}; public int solution(int[][] board){ //초기화 dist = new int[7][7]; Queue Q = new LinkedList..
⬛ 너비 우선 탐색 | BFS 🟩 1번. 타일 점프 | BFS 풀이 이 문제는 레벨 탐색 문제이다. 각 레벨에서 방문 가능한 정점들을 큐에 담아서 차례로 방문하는 방식으로 인접 정점 우선으로 처리한다. Q에는 각 레벨별로 닿을 수 있는 정점들이 존재할 것이므로 for문으로 그 정점들을 순회한다. 해당 정점 x에 대하여 다시 for 문을 돌면서 x가 가진 최대 점프 횟수까지를 차례로 순회한다. nx 정점이 우리가 찾는 도착지 직전값이면 return lv++ 하여 리턴하면 되고 nx 정점이 아직 n보다 작으면서 방문한 적 없을 경우에는 방문 처리하면 된다. → 이 사이클에 대하여 lv++ 처리하면서 각 레벨에 대해 방문 가능한 인접 정점들을 우선 방문하면서 최소 점프횟수로 도착지에 갈 수 있는 방법을 찾는 ..
🟩 4번. 팰린드롬의 경우 수 풀이 Deque 자료구조를 사용하여 팰린드롬 만들 것 1) 애초에 입력으로 들어온 String 구성이 팰린드롬을 만들 수 있는 구성인지 확인 (1) 문자별 빈도수가 모두 짝수 → 팰린드롬 만들기 가능 (2) 문자별 빈도수가 홀수인 경우 → 홀수인 문자 1개만 있으면 가능, 1개 이상이면 불가능 2) HashMap 사용하여 각 문자별 빈도수 체크 3) map을 keySet()으로 순회하면서 해당 키의 빈도수가 홀수인 문자를 odd변수로 카운팅한다. 4) 만약 odd > 1 이면 빈 String 배열을 곧장 리턴해준다. (팰린드롬 못 만들기 때문) 5) odd가 1개 or 0개여서 팰린드롬이 가능하다면. DFS() 시작 6) DFS에서는 Deque를 활용하여 각 깊이에서 순회할..
⬛ 깊이 우선 탐색 | DFS 🟩 1번. 가장 가까운 큰 수 풀이 일단 입력된 n의 구성을 잘라서 ArrayLIst에 담아주고 오름차순 정렬한다. 오름차순 정렬해두어야 작은값부터 차례로 순회하기 때 import java.util.ArrayList; import java.util.Collections; /*가장 가까운 큰 수 */ class Solution { static int answer, target;//최초 숫자 담기 static ArrayList num; static boolean[] visited;//방문용 static boolean flag; static int len; //길이 //DFS static void DFS(int lv, int number) { if(flag == true) ret..
⬛ 11. DP 동적 계획법 ⬛ DP 접근 방식 점화식의 규칙성이 존재해야 한다. 점화식 세우기 : D[i] 배열의 제대로 된 정의 점화식을 이용하여 D[i] 배열 채우기 D[N] 을 출력하면 == 정답이어야 한다. ⬛ 메모이제이션의 이해 앞선 부분 문제 푼 결과를 DP 테이블에 저장해둔 뒤, 재사용 할 것 톱 다운 방식 : 주로 재귀함수 : 큰 문제부터 점차 작은 문제로 바텀-업 방식 : 주로 반복문 : 작은 문제부터 큰 문제로 확장 ⬛ 0-1 배낭 문제 0-1 배낭 문제 : 물건을 통째로 배낭에 넣는데, 담을 수 있는 한 ‘최대 가치 낳도록 담는 문제 풀어볼 문제 : 동전 1, 동전 2, 평범한 배낭문제 등. 🟦 백준 4781번. 사탕 가게 | DP- 배당문제 (냅색) 문제 상근이는 선영이와 걸어가다..
⬛ 08. 그래프 ⬛ 08-1. 그래프의 표현 에지 리스트 : 엣지 중심으로 그래프를 표현 인접 행렬 : 노드 중심으로 그래프를 표현 인접 리스트 : 노드 중심으로 그래프를 표현 **** ⬛ 08-2. 유니온 파인드 특정 2개의 노드 연결 union 하고, 집합 여부 판별 find 하기 특정 2개의 노드를 연결하여 1개의 집합으로 묶은 Unioin연산, 두 노드가 같은 집합 소속인지 확인하는 Find 연산 ⚫ 백준 1717번. 집합의 표현 https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연..
⬛ 06. 그리디 ⬛ 06-1. 그리디 알고리즘 현재 상태에서 보는 선택지 중 최선의 선택지를 전체 선택지의 최선이라고 가정하는 알고리즘 그리디 알고리즘 적용 직전에 대상 데이터들을 (오름차순/내림차순) 정렬해두는 경우 多 현재 기준값을 기준으로 비교하고, 비교 한 뒤 현재의 기준값이 계속 갱신되는 행위 반복하는 것 ! ⬛ 그리디 접근 방식 1) 객체화 시켜서 각 필드의 값들에 대하여 객체의 compareTo 사용하여 정렬시키고, 최초 0번 값을 기준값으로 하여 비교한 뒤, 기준값 갱신시키는 방식 ex) 신입사원 class Sawon implements Comparable{ //필드 ... //생성자 ... @Override public int compareTo(Sawon o) { return 조건 };..
⬛ 05. 탐색 그래프의 순회 (=탐색) 현재 정점 처리 후 다음 처리할 정점에 대한 순서가 필요 한 정점에서 시작하여 그래프의 모든 정점을 한 번씩만 방문할 것. ⬛ 05-1. 깊이 우선 탐색 | DFS DFS는 한 번씩만 방문해야 하므로 visited[] 방문 체크 배열 필요하며 인접 리스트로 표현 🟦 백준 11724번. 연결 요소의 개수 구하기 DFS로 깊이 방문 하다가 복귀하는 게 한 덩어리 단위임 import java.util.ArrayList; import java.util.Scanner; /*11724번. 연결 요소의 개수 */ public class Main { static int N, M; static boolean[] visited; static ArrayList graph; //dfs..
⬛ 03. 자료 구조 ⬛ 03-2. 구간 합 S[i] = S[i-1] + A[i] i ~ j까지의 구간 합 구하기 : S[j] - S[i-1] 🟦 백준 11659번. 구간 합 구하기 S[i] 는 1~i까지의 합 : 먼저 구해놓고, M개의 입력받은 구간 a,b 사잇 구간합을 구해서 출력 import java.util.ArrayList; import java.util.Scanner; //11659번. 구간 합 구하기 4 public class Main { //실행 메인 public static void main(String[] args) { // TODO Auto-generated method stub Scanner kb= new Scanner(System.in); int N = kb.nextInt(); i..
섹션 3. 코딩테스트 [실전편] - 11. 동적 계획법 ⬛ 11. 동적 계획법 ⬛ 11-1. 동적 계획법 DP 🟦 동적 계획법 복잡한 문제를 여러 개의 단순한 문제로 분리하여, 부분 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방식 🟧 동적계획법 원리와 구현 1) 큰 문제를 작은 문제로 나눌 수 있어야 한다. 2) 작은 문제들이 반복되어 나타나고, 이 작은 문제들의 결과값이 항상 같아야 한다. 3) 메모이제이션 기법을 사용 : 모든 작은 문제들을 한 번만 계산하여 미리 DP 테이블에 저장해놓고, 추후 재사용 시 DP 테이블을 이용하는 방식 4) 동적 계획법 구현 방식 2가지 : (1) 톱 다운 방식 (2) 바텀 업 방식 🟦 예시 : 피보나치 수열 문제 피보나치 수열은 규칙성이 존재하는데 그..
섹션 3. 코딩테스트 [실전편] - 10. 조합 ⬛ 10. 조합 동적 계획법을 이해하는 기초가 됨 조합 점화식 도출 방법을 제대로 이해하자. ⬛ 10-1. 조합 알아보기 🟦 조합 Combination | nCr 조합 : n개의 숫자에서 r개를 뽑는 경우의 수 cf. 순열 : n개의 숫자에서 r개를 뽑고, 그 순서를 나열 일반적으로 조합을 구현할 때는 점화식을 이용 🟧 조합 구현하는 방식 1. 특정 문제를 가정하기 예를 들어. 5개의 데이터 중 3개를 선택하는 경우의 수를 구한다고 가정해보자. 2. 모든 부분 문제가 해결됐다고 가정하고, 지금 문제만 생각하기 5개 중에서 4개의 데이터들의 선택 여부를 모두 고려했다고 생각하고. 지금 시점은 가장 마지막 (5번째) 데이터의 선택 여부를 고려하는 중이라고 생각..
⬛ 09-4. 세그먼트 트리 🟦 세그먼트 트리 주어진 데이터들의 **‘구간 합’과 ‘데이터 업데이트’**를 빠르게 수행하기 위해 고안해낸 자료구조 세그먼트 트리의 종류 : 1) 구간합, 2) 최대/최소 구하기 구현 단계 : (1) 트리 초기화 하기 (2) 질의값(요구사항) 구하기 (3) 데이터 업데이트 🟧 세그먼트 트리의 구현 단계 1) 트리 초기화 하기 (1) 리프 노드의 개수가 데이터 개수 N 이상이 되도록 2^k ≥ N을 만족하는 k의 최솟값 구한 뒤 2^k * 2를 트리 배열의 크기로 정의 ex) 샘플 데이터 = {5, 8, 4, 3, 7, 2, 1, 6} : N = 8 2^3 = 8 따라서 배열크기는 2^3 X 2 = 16 크기로 정의 (2) 리프 노드에 원본 데이터를 입력한다. 이때 리프 노드..
⬛ 09-3. 이진 트리 🟦 이진 트리 (binary tree) 각 노드와 자식 노드의 개수(차수)가 2 이하로 구성되어 있는 트리 종류 : 편향 이진 트리, 완전 이진 트리, 포화 이진 트리 보통 1차원 배열의 형태로 표현 🟧 트리의 노드와 배열 인덱스 간 상관 관계 루트 노드 : index = 1; 부모 노드 : index = index / 2;// 현 인덱스 상위로 이동 왼쪽 자식 노드 : index = index*2; 오른쪽 자식 노드 : index = index*2 + 1; 🟧 트리의 순회 전위 순회 : U L R 중위 순회 : L U R 후위 순회 : L R U 🟦 백준 1991번. 트리 순회하기 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorde..
섹션 3. 코딩테스트 [실전편] - 09. 트리 🏓 선형 vs 비선형 자료구조 1) 선형 자료구조 : 현재 자료와 뒤 자료가 1:1 관계 2) 비선형 자료구조 : 현재 자료와 뒤 자료가 1:n 관계 ⬛ 09. 트리 ⬛ 09-1. 트리 사이클 X. 1개의 루트 노드만 가지고 있는 원소들 간의 1대 n 관계를 갖는 비선형 자료구조 상위 원소 → 하위 원소로 확장되는 구조 사이클X, 간선 N-1개 연결 그래프 🟧 트리의 구성요소 루트 노드 : 트리 가장 상위의 노드 부모 노드 : 두 노드 사이 관계에서 상위 노드 자식 노드 : 두 노드 사이 관계에서 하위 노드 리프 (단말) 노드 : 트리 가장 하위의 말단에서 자식 없는 노드 서브 트리 : 전체 트리에 속해있는 작은 하위 트리 각각의 노드는 자식 노드의 수만큼..
⬛ 08-7. 최소 신장 트리 🟦 신장 트리 n개 정점. 무방향 그래프에서 (사이클 없이) 간선 n-1 개로 이루어진 부분 그래프 🟦 최소 비용 신장 트리 정점 n개, 간선 n-1개. 사이클 X . 연결 그래프인 신장 트리의 조건을 만족하면서 총 간선의 가중치의 합이 최소인 트리 그래프의 모든 노드들을 연결하는 부분 그래프 중 가중치 합이 최소인 트리를 의미 🟧 1) 크루스칼 알고리즘 - (I) 가중치 ‘높은’ 간선 제거하여 최소비용 만듬 (1) 그래프의 모든 간선들 가중치 내림차순 정렬 (2) 사이클 X, 단절 X 가장 큰 간선 제거 (3) 간선 n-1개 남을 때까지 반복 후 종료 🟧 1) 크루스칼 알고리즘 - (II) 가중치 ‘낮은’ 간선 삽입하며 최소비용 만듬 (1) 그래프의 모든 간선들 가중치 오..
🔎 벨만-포드 알고리즘이란? 그래프 최단 거리 구하는 알고리즘 1. 다익스트라(Dijkstra) : 특정 한 정점 -> 다른 모든 정점의 최단 거리 2. 벨만-포드(Bellman-Frod) : 특정 한 정점 -> 다른 모든 정점의 최단 거리 3. 플로이드-와샬(Floyd-Wrasahll) : 모든 정점들 간의 최단 거리 ⬛ 08-6. 플로이드-워셜 🟦 플로이드-워셜 알고리즘 플로이드-워셜 : 모든 노드 간에 최단 경로 탐색 알고리즘 음수 가중치 엣지 존재해도 수행 가능 DP 동적계획법 원리 이용하여 접근 전체 경로의 최단 경로는 부분 경로의 최단경로 조합이다. //점화식 // s -> E까지의 최단 경로 vs s-> k, k->e 를 껴서 가는 경로 // 중 작은 값으로 업데이트한다. D[S][E] = ..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.