전체 글 (306)
2022-01-12 23:34:53
반응형

DBMS (DataBase Management System, 데이터베이스 관리 시스템) 

DBMS (DataBase Management System, 데이터베이스 관리 시스템)는 다수의 사용자들이 DataBase 내의 Data를 접근할 수 있도록 해주는 소프트웨어 도구의 집합

 DBMS 장점

 

  • Data의 접근성 용이
  • Data Control 강화
  • Application Program들을 쉽게 개발하고 관리할 수 있다.
  • 보안 강화

 

 DataBase File Architecture(데이터베이스 파일 구조)

 

DataBase File Architecture(데이터베이스 파일구조)는 위의 그림과 같이 논리영역과 물리영역으로 나누어서 볼 수 있다.

물리적으로 디스크에는 DataBase(데이터베이스)가  여러 개의 Data File로 구성되어 있다.

각각의 Data File은 여러 개의 Block 단위로 구성되어 있다.

ex) TableSpace(땅) - Segment(건물) - Extent(건물의 한 층) - Block(건물 한 층의 사무실)

  • Block

Oracle DB에서의 Block은 최소 단위 (KB)

  • Extent

- 여러 개의 Block의 집합 (Block을 묶음)

- I/O 단위는 Block이지만  Table Space로부터 공간을 할당하는 단위는 Extent이다.

  • Segment

- 여러 개의 Extent를 가지고 있는 Object이다.

- DataBase의 Table, Index, Undo처럼 저장공간이 필요로 하는 Object를 말한다.

* Undo Data : DML(Data Manipulation, 데이터 조작어)이 발생할 경우 변경되기 전의 Data 값

  • Table Space

- Segment를 담는 컨테이너로 여러 Data File로 구성

  • *.dbf

- Oracle DB 확장자 (DataBase File)

 

 출처

 

* DBMS 정의 및 장점 : https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EA%B4%80%EB%A6%AC_%EC%8B%9C%EC%8A%A4%ED%85%9C

* 디스크 영역 / 데이터 파일 구조 : https://jeong-pro.tistory.com/147

* Undo Data : 

http://wiki.gurubee.net/display/STUDY/1st_Undo

https://m.blog.naver.com/0325han/221190462093

+ 강의 교재

반응형
2022-01-12 22:50:28
반응형

 

DataBase (데이터 베이스)란?

DataBase (데이터 베이스)는 많은 사람들이 공유해서 사용할 목적으로 통합 관리되는 정보(Data)의 집합을 의미

 

 DataBase (데이터 베이스) 특징

 

  • Shared Data (공용 데이터)

- 여러 사용자들이 서로 다른 목적으로 공유하여 사용되는 Data를 의미

 

  • Integrated Data (통합 데이터)

- Data를 통합하여 Data 중복 제거 및 효율적으로 Data 관리가 가능

 

  • Stroed Data (저장 데이터)

- 중요한 Data는 삭제되지 않고 보존되도록 관리되어야 한다.

- 컴퓨터가 접근할 수 있는 디스크와 같은 저장 매체 & 저장소에 저장되어 휘발성이 아닌 영속성을 갖는다.

 

  • Operational Data (운영 데이터)

- 반드시 필요한 Data를 저장하는 것

- 불필요하게 Data를 저장하고 끝나는 것이 아니고 실제로 유용하게 사용할 수 있는 관리 목적으로 명확한 Data를 의미

 

 출처

 

https://wikidocs.net/3901

 

+ 강의 교재

반응형
2022-01-11 08:45:41
반응형

정수 제곱근 판별

 

 문제 설명

 

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

 제한 사항

 

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

 입출력 예

 

n return
121 144
3 -1

 

 Python 코드

 

from math import sqrt

def solution(n):
    return int(sqrt(n) + 1) ** 2 if sqrt(n) % 1 == 0 else -1

* 참고 링크 : https://velog.io/@cosmos/Programmers%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EC%88%98-%EC%A0%9C%EA%B3%B1%EA%B7%BC-%ED%8C%90%EB%B3%84-python

def solution(n):
    answer = 0
    num = n ** 0.5

    if num == int(num):
        answer = (num+1) ** 2
    else:
        answer = -1

    return answer

* 참고 링크 : https://jokerldg.github.io/algorithm/2021/04/14/int-sqrt.html

 

 C++ 코드

 

#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long solution(long long n) {
	if (sqrt(n) - (int)sqrt(n) == 0) // n이 정수의 제곱인 경우
		return (sqrt(n) + 1) * (sqrt(n) + 1);
	return -1;
}

 

* 참고 링크 : https://greenapple16.tistory.com/129

 

 출처

 

https://programmers.co.kr/learn/courses/30/lessons/12934

반응형
2022-01-11 08:41:06
반응형

최대공약수와 최소공배수

 

 문제 설명

 

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

 제한 사항

 

  • 두 수는 1이상 1000000이하의 자연수입니다.

 

 입출력 예

 

n m return
3 12 [3, 12]
2 5 [1, 10]

 

 Python 코드

 

from math import gcd
def solution(n, m):
    gcd_num = gcd(n, m)
    lcm_num = n*m // gcd(n,m)
    answer = [gcd_num, lcm_num]
    return answer

 

 

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int m) {
    vector<int> answer;
    int a, b, r;
    
    a = n;
    b = m;
    
    while(b != 0) {
        r = a % b;
        a = b;
        b = r;        
    }
    
    answer.push_back(a);
    answer.push_back(n * m / a);
    
    return answer;
}

 

 출처

 

https://programmers.co.kr/learn/courses/30/lessons/12940

반응형
2022-01-11 01:12:25
반응형

자릿수 더하기

 

 문제 설명

 

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

 제한 사항

 

  • N의 범위 : 100,000,000 이하의 자연수

 

 입출력 예

 

N return
123 6
987 24

 

 Python 코드

 

def solution(n):
    new = str(n)
    add = 0 
    
    for i in range(len(new)):
        add += int(new[i])
    return add

n을 문자열로 바꿔 new에 저장.
new의 길이 만큼 반복하는 i, 그동안 n의 i 인덱스 값을 add에 계속 더해줌. (더할 때는 int로 바꿔줘야 연산가능)
add 값 return

def sum_digit(number):
    return sum([int(i) for i in str(number)])

sum 함수를 통해 한 줄로 표현 가능

* 참고 링크 : https://velog.io/@joygoround/test%EC%9E%90%EB%A6%BF%EC%88%98-%EB%8D%94%ED%95%98%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

 C++ 코드

 

#include <iostream>
using namespace std;
 
int solution(int n)
{
    int answer = 0;
 
    while(n != 0)
    {
        answer = answer + n%10;
        n = n/10;
    }
 
    return answer;
}

* 참고 링크 : https://blockdmask.tistory.com/282

 

 출처

 

https://programmers.co.kr/learn/courses/30/lessons/12931

반응형
2022-01-11 00:54:48
반응형

행렬의 덧셈

 

 문제 설명

 

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

 

 제한 사항

 

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

 

 입출력 예

 

arr1 arr2 return
[[1, 2], [2, 3]] [[3, 4], [5, 6]] [[4, 6], [7, 9]]
[[1], [2]] [[3], [4]] [[4], [6]]

 

 Python 코드

 

def solution(arr1, arr2):
    for i in range(len(arr1)):
        for j in range(len(arr1[0])):
            arr1[i][j] += arr2[i][j]
    return arr1

이중 for문으로 행렬의 행과 열에 접근

먼저 변수 i는 리스트 arr1의 길이만큼 반복문에 적용

이때 len(arr1)은 행렬이 [[]]형식 일 때 바깥 대괄호에서 적용되는 길이

[[], [], ...]로 된 행렬은 리스트의 데이터로 리스트를 포함하고 있는 것으로

arr1의 길이라고 하면 안쪽 대괄호의 개수 즉 행의 개수라고 할 수 있음

두 번째 for문 변수 j는 len(arr1[0])만큼 반복되는데,

이는 [[], [], ...] 형식의 행렬에서 안쪽 대괄호 안의 데이터 개수이므로 열의 개수임

* 참고 링크 : https://sonar89.tistory.com/8

 

 C++ 코드

 

#include<iostream>
#include<vector>
using namespace std;
 
vector<vector<int> > sumMatrix(vector<vector<int> >A, vector<vector<int> >B)
{
    vector<vector<int> > answer;
 
    for(int i=0; i<A.size(); i++){  //2차원 배열의 y
 
        vector<int> v;              //하나의 y에 대한 x의 값들 (1차원 배열이라고 생각)
 
        for(int j=0; j<A[0].size(); j++){   //2차원 배열의 x
            v.push_back(A[i][j] + B[i][j]);
        }
 
        answer.push_back(v);
    }
    return answer;
}

* 참고 링크 : https://blockdmask.tistory.com/256

 출처

 

https://programmers.co.kr/learn/courses/30/lessons/12950

반응형