본문 바로가기

전체 글282

[DB - 데이터베이스 개론] Chapter 09. 정규화 목차 01. 정규화의 개념과 이상 현상 1. 정규화의 개념 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입·수정·삭제 연산을 수행할 때 부작용이 발생할 수 있다. 이러한 부작용을 이상(anomaly) 현상이라 한다. 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화다. 2. 이상 현상의 종류 이상 현상에는 아래와 같은 세 가지 종류가 존재한다. 삽입 이상(insertion anomaly) - 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 갱신 이상(update anomaly) - 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제 삭제 이상(deletion anomaly) - 튜플을 삭제하면 꼭 필.. 2022. 2. 5.
[DB - 데이터베이스 개론] Chapter 08. 데이터베이스 설계 목차 01. 데이터베이스 설계 단계 조직 구성원들의 다양한 요구 사항을 고려하여 제대로 된 데이터베이스를 구축하기 위해서는 사용자들의 요구 사항을 잘 분석하고, 분석한 결과를 바탕으로 데이터베이스의 논리적, 물리적 구조를 제대로 설계해야 한다. 데이터베이스 설계는 사용자들의 요구 사항을 고려하여 데이터베이스를 생성하는 과정이다. 품질 좋은 데이터베이스를 평가하는 대표적인 기준은 데이터베이스를 실제로 사용하는 구성원들의 요구 사항을 만족하는지 여부이다. 관계 데이터 모델을 기반으로 두고 데이터베이스를 설계하는 방법에는 대표적으로 두 가지가 있는데 여기에서는 그 중 하나인 E-R 모델과 릴레이션 변환 규칙을 이용한 데이터베이스 설계를 알아보자. E-R 모델과 릴레이션 변환 규칙을 이용한 데이터베이스 설계는 .. 2022. 2. 3.
[고득점 Kit(정렬)] 가장 큰 수 (Swift, Python) 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 풀이 입력으로 주어진 numbers 배열을 String의 형태로 바꾸어 정렬을 해주는데 이때 새로운 기준이 되는 정렬 함수를 만들어 줘야 한다. 예를들어 예제의 [3, 30, 34, 5, 9]를 String 형태로 바꾸어 내림차순으로 정렬하면 [9, 5, 34, 30, 3]이 된다. 가장 큰 수를 만들기 위해서는 [9, 5, 34, 3, 30]으로 정렬이 되어야 한다. 먼저 가장 앞의 숫자를 비교해.. 2022. 2. 3.
[고득점 Kit(힙)] 이중우선순위큐 (Python) 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 풀이 최소힙과 최대힙을 각각 만들어서 값을 넣어줬다. Insert 작업이 들어오면 각각의 힙에 값을 넣어줬고 Delete 작업이 들어오면 각각의 힙에서 값을 pop해줬다. 마지막에 두 힙에 값이 남아있다면 answer 배열에 최댓값과 최솟값을 찾아서 넣어줬다. 코드 import heapq def solution(operations): answer = [0, 0] minHeap = [] # 최소힙 maxHeap = [] # 최대힙 for operation in operations: if operation[0] == 'I': # Insert일 경우 두 힙에 값 push num = int(operation[2:]) heapq.heappush(m.. 2022. 1. 29.
[고득점 Kit(힙)] 디스크 컨트롤러 (Swift, Python) 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 풀이 먼저 입력으로 주어진 jobs에 대해서 작업이 요청되는 시점순으로 정렬하고 작업이 요청되는 시점이 같다면 작업의 소요시간을 기준으로 오름차순으로 정렬한다. 현재 시간 이전에 요청된 작업들을 toDoJobs 힙에 넣어주고 작업 소요시간이 가장 짧은 작업을 먼저 수행한다. 그 후 다시 현재 시간에 수행할 수 있는 작업들을 찾아서 toDoJobs 힙에 넣어주고 다시 작업 소요시간이 가장 짧은 작업을 수행한다. 위와 같은 작업을 반복한 뒤 입력으로 주어진 j.. 2022. 1. 28.
[고득점 Kit(힙)] 더 맵게 (Python) 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 풀이 최소힙을 사용하여 해결할 수 있다. 최소힙에서 두 개를 pop해서 문제에서 주어진 식대로 계산하여 다시 힙에 넣어주면 된다. 이때 첫번째로 꺼낸 값이 K이상이면 나머지 값도 전부 K이상이라는 의미이므로 진행을 중단한다. 마지막에 한 번 더 heap에서 값을 꺼내어 해당 값이 K 이상인가를 체크했는데 이는 마지막으로 heap에 두 개의 값이 남아있고 해당 값을 주어진 식대로 계산하여 K이상을 만족하게 됐을 때를 체크 하기 위해 추가하였다. 코드 .. 2022. 1. 27.
[고득점 Kit(해시)] 베스트앨범 (Swift, Python) 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 풀이 두 개의 사전을 만들어 하나는 각 장르별 총 재생된 횟수를 담아두고 나머지 하나에는 각 장르별의 각 곡의 재생 횟수와 고유 번호를 담아두었다. 총 재생된 횟수를 담아놓은 사전을 정렬하여 많이 재생된 순으로 장르를 갖고 와서 해당 장르의 곡들중에서 가장 많이 재생된 곡을 2개 뽑아서 answer 배열에 담아준다. 코드 [Swift] import Foundation func solution(_ genres:[String], _ plays:[Int]) -> [.. 2022. 1. 26.
[DB] 데이터베이스의 INDEX 목차 인덱스란? 인덱스는 DBMS의 검색 성능을 높이기 위한 자료구조라고 할 수 있다. 인덱스가 필요한 이유 일반적으로 책을 보면 마지막에 색인이라고 되어 있는 부분이 있다. 우리는 이를 통해 내가 찾고 싶은 단어가 몇 페이지에 존재하는지를 쉽게 알 수 있다. 만약 색인이 없다면 우리는 원하는 단어를 찾기 위해 책을 처음부터 살펴보면서 해당 단어가 몇 페이지에 있는지를 찾아야만 한다. 데이터베이스의 인덱스는 책에 있는 색인과 유사하다. 데이터를 찾을 때 해당 데이터가 어디 위치에 있는지를 인덱스를 활용하면 빠르게 찾아낼 수 있다. 만약 인덱스를 사용하지 않는다면 테이블의 처음부터 끝까지 탐색하여 데이터를 찾아야 하는데 이를 전체 테이블 스캔(Full Table Scan)이라고 한다. 이는 튜플의 수가 많.. 2022. 1. 25.
[DB - 데이터베이스 개론] Chapter 07. 데이터베이스 언어 SQL 목차 01. SQL의 소개 SQL(Structured Query Language)은 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어이다. 사용자가 처리를 원하는 데이터가 무엇인지만 제시하고 데이터를 어떻게 처리해야 하는지를 언급할 필요가 없어 비절차적 데이터 언어의 특징을 띤다고 할 수 있다. SQL은 기능에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나눈다. 데이터 정의어 : 테이블을 생성하고 변경&제거하는 기능을 제공한다. 데이터 조작어 : 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정,삭제,검색하는 기능을 제공한다. 데이터 제어어 : 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공하는 언어다.. 2022. 1. 25.