식별 관계 부모 테이블의 기본키를 자식테이블의 기본키로 이용하는 방법 반드시 부모테이블에 데이터가 존재해야 자식테이블에 데이터를 입력할 수 있음 (데이터 정합성 보장) 실선으로 표시 💡 데이터 정합성 (Data Consistency) : 어떤 데이터들이 값이 서로 일치하는 상태 💡 데이터 무결성 (Data Integrity) : 데이터 값이 정확한 상태 ex) 중복 데이터가 다 틀린 값으로 일치하는 경우 = 정합성 O, 무결성 X 비식별 관계 부모 테이블의 기본키를 자식테이블의 외래키로 이용하는 방법 부모테이블에 데이터가 없어도 자식테이블에 데이터를 입력할 수 있음 (데이터 정합성 보장 x) 점선으로 표시 💡 비식별 관계 장점 1. 구조 변경 용이 2. 부모 테이블과의 의존성 제거 3. 과도한 인덱스 제거
Index (인덱스) 테이블에서 데이터 조회 시 동작속도를 높여주는 자료구조 (컬럼의 값, 레코드 저장 주소) 를 key와 value의 쌍으로 저장 MYI (MySQL Index) 파일에 저장 Index 장점과 단점 장점 테이블 조회 시 속도와 성능이 향상 시스템의 전반적인 부하 감소 가능 💡 Index를 사용하면 좋은 경우 1. 규모가 큰 테이블 2. 삽입, 삭제, 수정 작업이 적은 경우 3. 데이터 중복도가 낮은 경우 4. WHERE, ORDER BY, JOIN 등이 자주 사용되는 경우 💡 데이터 중복이 많은 경우, INDEX 사용이 비효율적인 이유 ex) 이름, 나이, 성별 세 가지 컬럼을 갖고 있는 테이블 이름 - 다양한 경우의 수 나이 - INT 타입 성별 - 남, 녀 (2가지) 이 경우, 이름..
키 (Key) 란? : 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때, 튜플들을 서로 구분할 수 있는 기준이 되는 속성 Key 종류 후보키 (Candidate Key) 기본키로 사용할 수 있는 속성들 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합 하나의 릴레이션 내 중복된 튜플들이 있을 수 없으므로, 모든 릴레이션에는 반드시 하나 이상의 후보키 존재 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족 💡 유일성 : 하나의 키 값으로 하나의 튜플만을 유일하게 식별 가능 💡 최소성 : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성만으로 구성 기본키 (Primary Key) 후보키 중에서 선택한 주 키 (Main Key) 한 릴레이..
문제 문제 바로가기> BOJ 1799번: 비숍 1799번: 비숍 첫째 줄에 체스판의 크기가 주어진다. 체스판의 크기는 10이하의 자연수이다. 둘째 줄부터 아래의 예와 같이 체스판의 각 칸에 비숍을 놓을 수 있는지 없는지에 대한 정보가 체스판 한 줄 단위로 www.acmicpc.net 풀이 문제의 핵심은 "비숍의 이동 방식(체스판의 색깔)" 이다. 비숍은 대각선으로만 이동 가능하고, 이는 이동 전과 이동 후의 체스판의 색깔이 같음을 의미한다. 이 부분이 왜 핵심인가!! 그 이유는, 같은 색깔에 있는 비숍끼리만 영향을 끼칠 가능성이 있기 때문!! 이다. 따라서 전체 경우의 수인 2^(N*N)을 한번에 모두 탐색하는 것이 아닌, 검은색, 흰색으로 나누어 2번 탐색 + backtracking 하여, 2(검은색,..
문제 문제 바로가기> BOJ 23291번: 어항 정리 23291번: 어항 정리 마법사 상어는 그동안 배운 마법을 이용해 어항을 정리하려고 한다. 어항은 정육면체 모양이고, 한 변의 길이는 모두 1이다. 상어가 가지고 있는 어항은 N개이고, 가장 처음에 어항은 일렬로 바 www.acmicpc.net 풀이 어항을 쌓는 부분을 제외한 나머지 부분의 구현은 평이한 편이다.. 다만 어항 쌓느라 1시간 넘게 쓴 것 같다 ... 어항 쌓기 규칙을 찾아주는 게 어려웠다 ... 조금 .... 많이 ... 💡 어항 쌓기 규칙 총 5가지 변수를 이용해서 규칙을 찾았다. cnt : 그냥 1, 2, 3, 4, ... monotonic 하게 증가 idx : cnt가 짝수인 경우 1 증가한다. pivot이 증가할 때 pivot+=..
문제 문제 바로가기> BOJ 3055번: 탈출 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 풀이 BFS를 이용하여 문제를 해결했다. 물이 매 분마다 비어있는 칸으로 확장하고, 다음 시간에 물이 찰 예정인 칸으로 고슴도치가 이동할 수 없으므로 고슴도치의 이동 전에, 물의 확장을 먼저 처리해주었다. (분이 바뀔 때 마다 처리해주기 위해서 now 변수를 이용) import java.io.*; import java.util.*; public class Main { static final int[] dy = {-1, 1, 0,..
문제 문제 바로가기> BOJ 23289번: 온풍기 안녕! 23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net 풀이 벽을 고려해야해서,, 온풍기에서 바람이 나오는 부분을 구현하는 게 힘들었다 ,, 다음과 같은 규칙성을 가진다!! 규칙성이 필요한 BFS 였다,, ("같은 온풍기에서 나온 바람이 여러 번 도착"해도 온도를 여러번 상승시키지 않기 위해 visited 배열을 이용해주었다.) 벽은 4차원 배열을 이용해서 그 정보를 저장해주었다!! (코드 input 함수 참조) 비록 시간은 엄청 오래 걸렸지만 .... 2~3시..
문제 문제 바로가기> BOJ 2458번: 키 순서 2458번: 키 순서 1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여 www.acmicpc.net 풀이 인접 리스트를 이용하여 간접적으로 대소 비교가 가능한지 확인해 주었다! import java.io.*; import java.util.*; public class Main { static int N, M; static boolean[][] check; static List[] small, big; private static int solution() { ArrayDeque q = new ArrayDeque()..
문제 문제 바로가기> BOJ 6087번: 레이저 통신 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 풀이 한 단계 더 발전한 BFS 느낌이었다. 핵심은 4차원 방문 배열 + Prioirty Queue 이용이다. 💡 최단 거리가 아닌, 최소로 거울을 활용하는 횟수를 구하므로, Priority Queue를 이용하여 가장 적은 거울이 필요한 경우부터 탐색해주었다. 💡 visited[y][x][before_dir][next_dir] : 위치 (y, x) , 이전 방향 before_dir , 다음 방향 ne..
문제 문제 바로가기> SWEA 2382번: 미생물 격리 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 .... 정말... 국어를 잘해야한다. 주의할 점 1. 군집이 동시에 움직인다. 처음에 번호순서대로 움직여서 답이 이상하게 나왔다 ^^,, 이를 위해 tmpMap 배열을 이용해주었다! 2. "이동 후 두 개 이상의 군집이 한 셀에 모이는 경우 군집들이 합쳐지게 된다." 이 부분에서 구현 실수가 있었다. 예를 들어 군집 A=3, B=4, C=5라고 해보자. A, B, C 순서로 동일 칸에 도착했을 때, C의 방향이 해당 군집의 방향이 되어야 한다. 그런데 만약 A < B 이니까, B의 크기를 7 로 저장을..
문제 문제 바로가기> SWEA 2112번: 보호 필름 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 "성능검사를 통과하기 위한 최소 약품투입 횟수"를 구하기 위해 부분 집합을 이용해 문제를 풀었다! #include #define MAX_Y 14 #define MAX_X 21 using namespace std; int Y, X, K; int ans = 0; bool film[MAX_Y][MAX_X]; void input() { cin >> Y >> X >> K; for (int i = 0; i > film[i][j]; } a..
문제 문제 바로가기> SWEA 4193번: 수영대회 결승전 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 우승 경로 (= 가장 빠른 시간 내 도착점) 에 도착해야하므로, BFS를 이용했다! 소용돌이는 2초동안 유지되다가 1초동안 잠잠해지므로, 현재시간 % 3 == 2 인 경우가 소용돌이가 잠잠해지는 경우이다! 소용돌이가 잠잠해지지 않은 경우에는 현재 위치에서 대기해야하므로, 초를 + 1 한 후, 현재 정보를 다시 queue에 넣어 주었다! #include #include #include #define MAX 16 #define EMPTY 0 #define WALL 1 // 섬과 같은 장애물 #define..
💡 발생 이유 Project Facets에 Runtimes에 톰캣 설정이 안 돼 있어서 발생! 💡 해결 방법 Project - Properties - Project Facets - Runtimes 탭에서 다음과 같이 Tomcat을 체크해주면 사라진다!!
문제 문제 바로가기> BOJ 16434번: 드래곤 앤 던전 16434번: 드래곤 앤 던전 첫 번째 줄에 방의 개수 N (1 ≤ N ≤ 123,456) 과 용사의 초기 공격력 HATK (1 ≤ HATK ≤ 1,000,000) 가 주어집니다. i+1번째 줄엔 i번째 방의 정보를 나타내는 세개의 정수 ti, ai, hi (ti ∈ {1, 2}, 1 www.acmicpc.net 풀이 이분 탐색을 이용해, "용사가 N번째 방에 있는 용을 쓰러트리기 위한 최소의 HMaxHP를"를 구해주었다. HMaxHP의 범위는 int 범위를 넘어갈 수 있기 때문에, long long 으로 설정해주어야 하며, 용사와 몬스터의 전투 과정 또한 반복문을 통해 일일이 해보는 것이 아닌, 수식 계산을 통해 해주어야 한다! ( ex 용사의..
"후회는 선택하는 순간에 오진 않잖아요, 과정에서 오지. 나는요, 내 선택을 단 한 번도 후회해 본 적 없어요. 기를 쓰고 그렇게 만들었거든." - 스타트업 5화 - 한동안 정말 반해있었던, 드라마 대사 !! 오랜만에 생각나서 다시 찾아봤다 !!!