We will find a way, we always have.

-interstellar

전체 글 303

[DB] 스키마 (Schema)

스키마 (Schema) 스키마는 데이터베이스의 구조와 제약 조건에 관하여 전반적인 명세를 기술한 메타데이터의 집합이다. 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 뿐만 아니라 데이터들의 제약 조건까지 포함되어 있다. 속성의 데이터 타입을 나타내지는 않는다. 스키마는 시간에 따라 불변인 특징을 가지고 있다. 스키마의 3계층 스키마는 사용자의 관점에 따라 3계층으로 나뉜다. 외부 스키마 (View Schema) 사용자 관점에서의 논리적인 구조이다. 사용자와 데이터베이스 간의 상호 작용을 정의할 수 있는 뷰 레벨이다. 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브스키마라고도 불린다. 때문에 하나 이상의 외부 스키마가 존재할 수 있으며 하나의 외부 스키..

[백준] 28357번: 사탕 나눠주기

🔈 문제 소수전공 수업을 마무리한 찬우는 축하의 의미로 학생들에게 사탕을 나누어 주려 한다. 구체적으로, 기준이 되는 음이 아닌 정수 $X$를 정한 뒤 최종 점수가 $X$점을 넘는 학생들에게 점수가 높은 만큼 많은 사탕을 줄 것이다. 즉, $X+1$점을 받은 학생은 $1$개, $X+2$점을 받은 학생은 $2$개, $T$($T > X$)점을 받은 학생은 $T - X$개의 사탕을 받게 된다. 찬우는 학생들에게 최대한 많은 사탕을 나누어주고 싶기 때문에 기준 점수 $X$를 가능한 한 낮게 정하려 한다. 하지만, 지금 가지고 있는 돈으로는 사탕을 $K$개까지만 살 수 있기 때문에 사탕의 총 개수가 $K$개를 넘으면 안 된다. 찬우의 수업은 총 $N$명이 수강했고, $i$번째 학생은 $A_i$점을 받았다. 수강생..

[리뷰] 그림으로 배우는 리눅스 구조

한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 하드웨어와 소프트웨어를 이해하기 위해서 운영체제에 대한 지식은 필수적이다. 또한 운영체제에서 리눅스는 빠질 수 없는 운영체제이다. 리눅스를 배우고 싶은 사람들에게 그림으로 배우는 리눅스 구조는 필독서가 될 것 같다. 이 책은 운영체제에 대한 내용을 Python, Go, Bash 등으로 작성된 코드를 기반으로 실습을 진행하여 어렵지 않게 이해시켜주고 있다. 흐름은 우선 리눅스 개요부터 시작하여, 프로세스 생성과 종료와 같은 프로세스 관리, 프로세스 스케줄러, 메모리 관리 시스템, 프로세스 통신 파일 시스템, 메모리 계층 뿐만 아니라 가상화 기능과 컨테이너에 대해 후루룩 훑는다. 이 책을 실습과 같이 진행한다면 완독하고 난 후에는 커널, 하드웨어 등..

Blah blah 2023.09.24

[객체지향의 사실과 오해] 01. 협력하는 객체들의 공동체

협력하는 객체들의 공동체 시너지를 생각하라. 전체는 부분의 합보다 크다. - 스티븐 코비(Stephen R. Covey) 객체지향은 실세계의 모방이라는 개념은 객체지향을 이루는 철학적인 개념을 설명하는데에는 도움이 되지만, 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하는데에는 도움이 되지 못한다. 객체지향의 목표는 실세계의 모방은 전혀 아니다. 오히려 새로운 세계를 창조하는 것이라고 볼 수 있다. 그럼에도 불구하고 계속 사용하고 있는 이유는 상태와 행위를 캡슐화(encapsulation) 하는 소프트웨어 객체의 자율성(autonomous)을 설명하는데 효과적이기 때문이다. 현실세계에서 암묵적으로 약속을 맺고, 명시적인 계약을 기반으로 협력하여 목표를 달성해나가는 과정은, 메시지를 주고 받으며 ..

카테고리 없음 2023.09.22

[알고리즘] KMP 알고리즘

문자열 $N$ 와 $H$가 주어졌을 때 $N$에 $H$ 있는지 찾는 문자열 검색 알고리즘에 대해 알아보자. 나이브하게 접근해보면 $N$의 첫문자부터 마지막문자까지 $H$와 하나하나 비교해가면서 일치하는지 판별할 수 있고 해당 솔루션의 시간복잡도는 $O(|N|*|H|)$ 이다. 문자열의 길이가 짧다면 해당 접근방법도 구현도 쉽고 나쁘지만은 않다. 하지만 문자열의 길이가 커진다면 제한시간내에 동작하지 못하게 된다. $N[k...i-1]$과 $H[...i-1]$ 까지는 문자열이 일치하였지만 $H[i]$ 문자에서 일치하지 않는경우 다시 $N[k+1]$ 부터 비교하는 것이 아니라 이미 $H[...i-1]$까지 어떤 문자가 있는지 알고 있으니 보지 않아도 $H[k+1]$이 $H[0]$과 같은지 다른지는 알 수 있지..

[코드포스] 1872 D. Plus Minus Permutation

📖 Solution 문제의 요구사항을 정리해보면 길이 n의 조합중에서 x배수의 숫자의 합에서 y배수의 숫자의 합의 차를 가장 크게 만들 수 있는 조합을 찾고 그 차를 출력하는 문제이다. A - B의 차를 크게 만들기 위해서는 A를 최대한 크게, B를 최대한 작게 만들면 된다. 그렇다면 x의 배수 위치에는 n부터 내림차순으로 배치하고, y의 배수 위치에는 1부터 오름차순으로 배치하면 된다. 둘이 겹치는 부분이 있을 수 있는데 이는 0이 되기 때문에 상관없다. 그렇다면 이제 구해야 하는 점은 n에서 x 배수의 갯수, y 배수의 갯수 그리고 겹치는 부분이다. 이 겹치는 부분은 lcm 을 사용하여 찾을 수 있다. 💻 Code HTML 삽입 미리보기할 수 없는 소스 🔗 Problem https://codeforc..

[DB] 트랜잭션

트랜잭션 이해 트랜잭션 - 개념 이해 트랜잭션은 데이터베이스의 작업 단위이다. ACID 트랜잭션이 안전하게 수행된다는 것을 보장하기 위해서는 ACID가 만족해야 한다. Atomicity(원자성): 설정된 트랜잭션 범위 안의 내용들이 마치 하나의 작업처럼 모두 성공하거나 모두 실패해야 한다. Consistency(일관성): 모든 트랜잭션은 일관성 있는 DB 상태를 유지해야 한다. 트랜잭션은 DB에서 정한 무결성 제약 조건을 항상 만족해야 한다. Isolation(독립성): 여러 트랜잭션이 있을 때, 각각의 트랜잭션은 다른 트랜잭션의 연산에 끼어들지 못하고 독립적이다. Durability(영구성): 트랜잭션이 성공했다면 그 결과가 항상 기록되어야 한다. 문제가 발생하여도 DB 로그 등을 사용해서 성공한 트랜..

[원클릭 슴리] 요구사항 파악

이전 글에서는 원클릭 슴리가 무엇이고 슴리 만드는 방법을 알아봤다. 이번 글에서는 주어진 요구사항을 파악하고 이를 어떻게 객체지향적으로 짜내려갔는지 설명해보려고 한다. 요구사항 4개의 음원 사이트 3개의 OS 환경 8개의 곡 각 음원 사이트마다 음원의 songid 가 다르다. 그리고 OS 마다 URL 형식이 다르고, 또 이는 음원 사이트 마다 다르다. 가장 먼저 들었던 고민거리는 8개의 songId 를 어떤 형태로 저장할지가 고민이였다. 이 한 음원에 대한 songid는 사이트마다 다르지만 그 음원의 타이틀은 동일하다. 예를들어 CAKE 라는 곡의 songId 는 멜론에서는 11223344 이지만, 지니에서는 56785678 인 것이다. 음원사이트 마다 타이틀은 중복되기에 이 타이틀를 enum으로 관리하..

Ploject 2023.09.03

[백준] 20560번: 맛집 탐방

🔈 문제 은수는 맛집을 탐방하러 도시로 여행을 떠날 것이다. 은수가 갈 도시에는 총 $N$개의 맛집이 있다. 도시에는 맛집에서 맛집으로 이동할 수 있는 일방통행 길이 $M$개 있고, 각 길의 중간에는 기념품 상점이 있다. 어떤 길은 출발하는 맛집과 도착하는 맛집이 같을 수도 있으며, 여러 길이 같은 맛집을 연결할 수도 있다. 은수는 도시의 맛집에서 여행을 시작해서, 길을 이용해 맛집을 탐방하다 도시의 맛집에서 여행을 끝낼 것이다. 여행을 시작한 곳과 여행을 끝낸 곳이 같을 필요는 없다. 도시는 은수가 사는 마을에서 멀리 떨어져 있기 때문에, 은수는 한 번의 여행에서 최대한 많은 맛집과 상점을 들르려고 한다. 특히, 여행 중에 모든 맛집을 방문하거나 모든 기념품 상점을 방문한다면 다음 여행에서 할인 혜택을..