반응형

프로그래밍 135

[Data Structure] Linear - (5) Stack

스택(Stack) 후입선출(Last-in First-Out, LIFO)특징을 가진 자료구조다. 즉, 가장 최근에 들어온 자료가 가장 먼저 나가도록 되어 있다. 커스텀 스택구현 파이썬으로 스택을 구현하기 위해선 우선 두 가지 고려할 점이 있다. List? 일반적인 경우 그냥 파이썬 리스트로 스택을 사용해도 된다. 하지만 값이 계속해서 삽입되는 경우 파이썬 리스트는 동적 배열이므로 공간을 자동적으로 확장하면서 O(n)의 시간이 걸릴 때가 가끔 있다. 참고 공간이 작을 땐 문제가 안되겠지만 무지막지하게 큰 경우 시간이 오래 걸릴 수도 있다. Singly Linked List? 어차피 후입선출, 즉 맨끝에서만 자료가 삽입되고 나갈 수 있도록 구현하면 된다 각 자료들이 레퍼런스로만 연결되어 있기 때문에 공간의 확..

[Data Structure] Linear - (4) Deque

데크(Deque) 큐가 양쪽으로 연결된 형태. 따라서 양쪽에서 삽입과 삭제가 가능하다. 이미 파이썬에는 collections모듈에 deque가 구현되어 있다. c/c++로 구현되어 있으며 양쪽에서 삽입과 삭제가 가능해야 하므로 더블리 링크드 리스트로 만들어져 있다. 이로 인해 양쪽에서 삽입과 삭제가 O(1)의 시간이 걸리므로 코딩테스트 파이썬에서 스택이나 큐를 이용할 때 이 데크를 사용하기도 한다. 커스텀 데크 구현 파이썬으로 데크를 구현해 보았다. from typing import Iterable, Optional class Node: """더블리 링크드 리스트의 노드 클래스""" def __init__(self, data) -> None: self.data = data self.prev = None ..

[Data Structure] Linear - (3) Linked List - Circular Linked List

원형 링크드 리스트 (Circular Linked List) 싱글리 링크드 리스트에서 마지막 노드가 다시 첫 노드와 연결되어 있는 자료구조다. 따라서 마지막 노드와 첫번째 노드를 O(1) 시간에 방문할 수 있다는 장점과 리스트가 비어있을 때를 제외하고 모든 노드의 레퍼런스가 None을 가지지 않기 때문에 None 조건에서 조금 자유로울 수 있다는 장점을 가지고 있다. 하지만 싱글리 링크드 리스트로 구현했다면 앞 노드를 방문하기는 쉽지 않다는 단점이 있다. 더블리 링크드 리스트로 구현하면 해결된다. 또한 무한 반복의 우려가 있다. class Node: def __init__(self, data) -> None: self.data = data self.next = None class CircularLinke..

[Data Structure] Linear - (2) Linked List - Doubly Linked List

더블리 링크드 리스트 (Doubly Linked List) 노드들이 다음 노드 뿐만 아니라 이전 노드에 대한 레퍼런스까지 가진 링크드 리스트를 더블리 링크드 리스트라고 한다. 앞과 뒤의 노드에 대한 레퍼런스를 가지고 있기 때문에 양 방향으로 탐색할 수 있는 특징이 있다. 노드(Node) class Node: """더블리 링크드 리스트 노드""" def __init__(self, data) -> None: self.data = data self.next = None # 다음 노드에 대한 레퍼런스 self.prev = None # 이전 노드에 대한 레퍼런스 def __str__(self) -> str: return str(self.data) # 노드 인스턴스 node1 = Node(3) node2 = Nod..

[Oracle] 002. Ids_OracleConfigDlg_DatabaseConfigFailedMsg An error occurredwhile configuring Oracle XE database

👀 문제점 오라클을 삭제하고 다시 설치하는 과정에서 다음과 같은 오류가 발생했다. '앱 및 기능'을 통해 오라클을 삭제했음에도 불구하고 오라클 데이터베이스를 구성하는 과정에서 오류가 발생했다. 🧐 해결 오라클을 삭제할 때 일부 파일, 레지스트리, 환경변수가 함께 삭제되지 않아서 발생하는 문제였다. 해결책은 아래 파일들을 손수 지워주면 된다. (C드라이브 기본 경로 설치 기준) 1. C:\app 폴더 이하 전부 삭제 데이터베이스 서버 구동 관련 파일과 중요한 DB 관련 정보가 들어있는 폴더로, 전부가 삭제되지 않을 때가 있다. C:\app\사용자이름\product\21c\... 과 같은 경로를 가진 폴더가 남아있다면 지워주자. 🔍가끔 폴더가 삭제되지 않을 수가 있다. dat파일이 아직 실행중이라거나.. 작..

[SQLD] SQL 기본 및 활용 Section 03. SQL 최적화의 원리

1. 옵티마이저(Optimizer)와 실행 계획 01. 옵티마이저 SQL 개발자가 SQL을 작성하고 실행할 때, 옵티마이저가 SQL을 어떻게 실행할 것인가를 계획함 즉, SQL 실행 계획(Execution Plan)을 수립하고 SQL을 실행함 옵티마이저는 SQL의 실행 계획을 수립하고 SQL을 실행하는 DBMS의 소프트웨어 결과가 같은 SQL문도 어떻게 실행하느냐에 따라 성능이 달라지므로 옵티마이저의 실행 계획은 SQL 성능에 아주 중요한 역할을 함 02. 옵티마이저 특징 데이터베이스에 관한 모든 메타데이터를 가지고 있는 데이터 딕셔너리(Data Dictionary)에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해 예상되는 비용을 산정 여러 개의 실행 계획 중에서 최저 비용을 가지고 있는 계획을 ..

[SQLD] SQL 기본 및 활용 Section 02. SQL 활용 (2) 그룹 함수부터

4. 그룹 함수 (Group Function) 01. ROLLUP GROUP BY의 칼럼에 대해 Subtotal을 만들어 줌 ROLLUP함수는 뒤에 오는 칼럼의 순서에 따라 서브토탈을 다르게 만들 수 있다. 즉, 칼럼 순서가 중요하다 ROLLUP(COL1, COL2)일 경우 COL1별 합계, COL1별 COL2 합계, 전체 합계가 조회되며, 반대의 경우에는 COL2별 합계, COL2별 COL1합계, 전체 합계가 조회됨 CREATE TABLE DEPT ( DEPTNO NUMBER(10) PRIMARY KEY, DEPTNAME VARCHAR2(20) ); INSERT INTO DEPT VALUES (1000, '총무부'); INSERT INTO DEPT VALUES (1001, '기획부'); INSERT I..

[SQLD] SQL 기본 및 활용 Section 02. SQL 활용 (1) 조인부터 서브쿼리

1. 조인(JOIN) 01. EQUI JOIN (1) EQUI JOIN 여러 개의 릴레이션을 사용해 새로운 릴레이션을 만듦 EQUI JOIN은 어떤 칼럼을 기준으로 두 개의 테이블 간의 교집합을 산출함 CREATE TABLE DEPT ( DEPTNO NUMBER(10) PRIMARY KEY, DEPTNAME VARCHAR2(20) ); CREATE TABLE EMP ( EMPNO NUMBER(10) PRIMARY KEY, ENAME VARCHAR2(20), DEPTNO_ID NUMBER(10) NOT NULL, SAL NUMBER(20), CONSTRAINT DEPT_PK FOREIGN KEY (DEPTNO_ID) REFERENCES DEPT(DEPTNO) ON DELETE CASCADE ); INSER..

[SQLD] SQL 기본 및 활용 Section 01. SQL 기본 (3) 내장형 함수부터 끝까지

9. 내장형 함수 ( BUILT-IN FUNCTION ) 모든 데이터베이스는 SQL에서 사용할 수 있는 내장형 함수를 가짐 DBMS 벤더별로 약간의 차이가 있지만 거의 비슷한 방법으로 사용이 가능함 내장형 함수로는 형변환 함수, 문자열 및 숫자형 함수, 날짜형 함수 등이 있음 01. DUAL 테이블 DUAL 테이블은 오라클 데이터베이스에 의해 자동으로 생성되는 테이블임 오라클 데이터베이스 사용자가 임시로 사용할 수 있는 테이블로 내장형 함수를 실행할 때도 사용 가능함 모든 사용자에게 공유되는 특별한 단일 행 테이블로서 주로 상수, 순수 함수, 다른 SQL 표현식의 결과값을 조회할 때나 테스트 쿼리나 일시적인 결과를 생성할 때 사용함 SELECT * FROM DUAL; SELECT SYSDATE FROM ..

[SQLD] SQL 기본 및 활용 Section 01. SQL 기본 (2) DML부터 형변환까지

4. DML ( Data Manipulation Language ) 01. INSERT 일반적인 데이터 삽입 SELECT * FROM EMP; INSERT INTO EMP VALUES (5, '강순자', 700, '1002', sysdate); SELECT * FROM EMP; 테이블에 행(튜플)을 삽입하기 위해서는 INSERT INTO ~ VALUES (~) 구문을 사용하면 된다. INSERT INTO EMP(EMPNO, ENAME, DEPTNO_ID) VALUES (6, '곽민재', '1001'); 위와 같이 일부 열(칼럼)만 선택해서 데이터를 삽입할 수 있다. 다만 빠진 열에 not null 제약조건이 있을 경우 오류가 발생한다. ❗ INSERT문을 실행했다고 데이터 파일에 저장되는 것은 아니며, ..

반응형