질문과 피드백은 언제나 환영!

댓글로 남겨주세요:)

분류 전체보기 50

데이터베이스 - DBMS[2]

이전 포스팅에서 DBMS의 정의, 특징, 역사를 알아보았다. 이번 포스팅에서는DBMS 언어에 대해 알아본다. 데이터 정의어 (DDL : Data Definition Language) 사용자는 DDL을 사용해 데이터베이스 스키마를 정의한다. DDL로 명시된 문장이 입력 -> DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그 or 데이터 사전에 저장 데이터 정의어의 기본적 기능 데이터 구조 생성 ex) CREATE TABLE 데이터 구조 변경 ex) ALTER TABLE 데이터 구조 삭제 ex) DROP TABLE 특정 인덱스 정의 ex) CREATE INDEX (위의 예시는 모두 SQL의 예시입니다.) 데이터 조작어 (DML : Data Manipulation Language) 사용자는 DM..

데이터 베이스 2023.10.21

데이터베이스 - DBMS

이전 포스팅에서 데이터베이스에 대한 기본 개념을 알아보았다. 이번 포스팅에서는 DBMS의 정의와 특징, 발전 과정을 알아본다. DBMS 데이터 베이스를 관리하는 소프트웨어 패키지. 아래의 동작을 수행한다. 사용자가 새로운 데이터 베이스를 생성할 수 있게 한다. 사용자가 데이터 베이스의 구조를 명시할 수 있게 한다. 사용자가 데이터를 효율적으로 질의하고 수정할 수 있게 한다. 시스템의 고장, 권한이 없는 사용자로부터 데이터를 안전하게 보호한다. 동시에 여러 사용자가 데이터베이스에 접근하는 것을 관리한다. '데이터베이스 언어'를 한 개 이상 제공한다. (프로그래밍 언어) 대표적인 데이터베이스 언어로는 SQL, NoSQL 등이 있다. SQL은 여러 DBMS가 제공하는 사실상의 표준 데이터베이스 언어이다. Fi..

데이터 베이스 2023.10.20

데이터베이스 - 데이터베이스 시스템

이번 포스팅에서는 데이터 베이스 시스템의 정의와 구성 요소에 대해 알아본다. 사전 지식 정보 vs 데이터 데이터를 가공 -> 정보 데이터를 프로그램과 질의에 의해 정보로 변환하게 된다. 데이터베이스 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임 특징 여러 부서에 속하는 여러 사용자가 동시에 사용한다. 중복을 최소화 하면서 통합된다. 조직에 대한 데이터 뿐만 아니라 데이터베이스 스키마 또는 메타데이터까지 포함한다. 프로그램과 데이터 간의 독립성이 제공된다. -> 어떤 프로그램을 써도 접근 가능하다. (호환성 좋다) 데이터 베이스 스키마: 데이터 베이스의 구조를 뜻한다. 자주 변경되지 않는다. 데이터베이스의 모든 가능한 상태를 미리 정의한다. 내포(intension)이라고..

데이터 베이스 2023.10.20

소프트웨어공학 - 프로젝트 관리와 계획(문제 정의, 타당성 분석)

프로젝트를 운영할 때, 체계적이고 명확한 계획을 세우기 위한 5가지의 단계는 다음과 같다. 1. 문제정의 2. 타당성 분석 3. 소프트웨어 개발 비용 산정 4. 일정 계획 5. 위험 분석 여기서 계획이란, 프로젝트의 who(누가), how(어떻게), when(어느 기간 동안), what(무엇)을 예측하는 작업이다. 문제 정의 무엇을 개발할 것인지 명확히 정의하는 과정 소프트웨어의 개발의 첫 작업 개발 범위 결정 필요 능력 개발하고자 하는 영역의 배경지식 기존에 존재하는 유사 시스템을 사용해 보고 분석할 수 있는 능력 타당성 분석 경제적 타당성, 기술적 타당성, 법적 타당성. 세 가지 타당성을 분석 후 개발 여부 판단 경제적 타당성 경영자: 개발할 시스템에 대한 투자 효율성 분석 -> 기업에 얼마나 많은 ..

소프트웨어공학 - 소프트웨어 생명 주기 모델

소프트웨어 생명 주기 (SDLC) SDLC (Software Development Life Cycle)은 소프트웨어 제작 과정에서 일어나는 일련의 과정을 의미한다. SDLC의 목적은 고품질의 소프트웨어 제품을 만드는 것이다. 1단계 계획 - 비용 기간, 위험분석, 문제 정의( 목표 및 제약조건) 등 프로젝트를 수행하는 데 필요한 것 계획 2단계 분석(요구 분석) - 소프트웨어의 기능, 제약조건, 목표 등을 사용자와 명확히 정의 3단계 설계 - 코딩할 수 있는 수준으로 환경에 밀접하게 구체화. 소프트웨어의 구조를 정의하고 알고리즘을 작성하는 단계 4단계 구현 - 프로그래밍 언어를 사용해 실제로 프로그래밍 작성. 프로그래밍 기법, 스타일, 순서를 결정 5단계 테스트 - 시스템이 요구사항을 만족하는 지, 예상..

파이썬 알고리즘 공부 - 투 포인터 / 백준 1940 / 백준 2018 / 백준 1253

투 포인터 알고리즘 (Two Pointer Algorithm)은 리스트에서 두 개의 포인터를 사용해 원하는 결과를 찾거나 특정 조건을 만족시키는 알고리즘이다. 보통 O(N)에 문제를 해결할 수 있어 유용하다! 두 포인터를 한 방향으로 진행: 두 포인터를 리스트의 시작 위치에서 같은 방향으로 움직인다. 일반적으로 시작 위치와 끝 위치에서 시작하고, 필요에 따라 포인터를 이동시키면서 조건을 만족하는 부분을 찾는다. 두 포인터를 반대 방향으로 진행: 두 포인터를 배열이나 리스트의 양 끝에서 서로 반대 방향으로 움직인다. 이 방식은 주로 두 요소의 합, 차 등을 비교하거나 반대 방향에서 수렴해가는 문제를 해결할 때 사용됩니다. 백준 1940번 https://www.acmicpc.net/problem/1940 1..

파이썬 알고리즘 공부 - 구간 합

합 배열을 만들어 두고 이를 통해 구간 합을 구할 수 있다. 구간합: s[j]-s[i-1] => i~j까지의 구간 합 예제 풀이 import sys N,M=map(int, sys.stdin.readline().split()) num=sys.stdin.readline().split() li=[] for i in range(M): new=(sys.stdin.readline().split()) li.append(new) sectionsurplus=[0,int(num[0])] for i in range(0,len(num)-1): sectionsurplus.append(int(num[i+1])+int(sectionsurplus[i+1])) for i in range(M): A=int(li[i][1]) B=int(..

배열 vs 리스트 (c++)

array -인덱스를 사용해 값에 바로 접근 - 값을 삽입/삭제 어려움 (다 한 칸씩 밀어야 함) - 배열 크기는 선언할 때 지정할 수 있으며 한 번 선언하면 변경 x -간단한 구조 list(linked list) - 인덱스 x, 앞에서부터 순서대로 접근해서 찾아야함 - 포인터로 연결되어 있기 때문에 데이터 삽입 삭제 빠름 - 선언 시 크기 별도 지정 x - 포인터를 저장할 공간이 필요 --> 배열보다 복잡

알고리즘 2023.08.28

파이썬 알고리즘 시간복잡도

N의 범위가 500인 경우 : 시간 복잡도가 O(N^3)인 알고리즘으로 설계하면 풀이 가능 N의 범위가 2,000인 경우 : 시간 복잡도가 O(N^2)인 알고리즘으로 설계하면 풀이 가능 N의 범위가 100,000인 경우 : 시간 복잡도가 O(NlogN)인 알고리즘으로 설계하면 풀이 가능 N의 범위가 10,000,000인 경우 : 시간 복잡도가 O(N)인 알고리즘으로 설계하면 풀이 가능 파이썬은 1초에 2,000만에서 1억정도의 연산을 처리할 수 있다.

백준 2164번 파이썬 풀이

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 결론 미리 보기 파이썬에서 string slicing은 시간복잡도 N(len(str))이므로 특정 인덱스의 글자에 접근할 때는 list로 만들어 접근하는 것이 시간복잡도 O(1)로 빠르다! 가장 직관적으로 짤 수 있는 코드는 아마 아래의 코드일 것이다. import sys N=int(sys.stdin.readline()) st='' for i in range(N): st+=str(i+1) for ..