learn to code

    [자료 구조와 알고리즘] 해시테이블(HashTable)

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 해시테이블(HashTable) 📍 해시테이블(HashTable) 👉🏻 해시, 맵,해시맵, 딕셔너리라고도 불림 👉🏻 해시 + 테이블 합쳐진 자료 구조 📍 해시테이블(HashTable) 예시 👉🏻 야구 선수의 등 번호 👉🏻 기존 테이블은 메모리 낭비하는 경우가 있어(ex: 야구 선수 등번호의 경우 빈 숫자가 있음) 특정한 계산(해시 함수, ex: 10으로 나눠서 넣음)을 거쳐 메모리 절약을 하고자 함 👉🏻 키(Key)를 알고 있을 경우 조회/삽입/삭제를 O(1)의 성능으로 접근할 수 있게 됨 👉🏻 단, 이때 등 번호가 11번, 21번이 있다면 해시 함수를 거친 값은 모두 1이 됨 👉🏻 중복된 값이 있다면 같은 인덱스에 연결 리스트로 연결함 👉🏻 21번을 찾고자 ..

    [자료 구조와 알고리즘] 덱(Deque)

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 덱(Deque) 📍 덱(Deque) 👉🏻 데이터의 삽입과 제거를 head, tail에서 자유롭게 할 수 있음 👉🏻 덱을 이용하여 스택, 큐를 모두 구현할 수도 있음 📍 덱의 추상 자료형 [ Deque.mjs ] import { DoublyLinkedList } from './DoublyLinkedList.mjs'; class Deque { constructor() { this.list = new DoublyLinkedList(); } printAll() { this.list.printAll(); } // O(1)의 성능 addFirst(data) { this.list.insertAt(0, data); } // O(1)의 성능 removeFirst() { re..

    [JDBC 드라이버] DB별 JDBC 드라이버 연결 파일

    1. Oracle Ddriver [oracle.jdbc.driver.OracleDriver] URL [jdbc:oracle:thin:@localhost:1521:DBNAME] 오라클버전 ojdbc 버전 및 JDK 버전 21.x ojdbc11.jar (JDK11, JDK12, JDK13, JDK14, JDK15 및 JDK17 포함) ojdbc8.jar (JDK8, JDK11, JDK12, JDK13, JDK14 및 JDK15 포함) 19.x ojdbc10.jar (JDK10, JDK11 포함) ojdbc8.jar (JDK8, JDK9, JDK11 포함) 18.x ojdbc8.jar JDK8 , JDK9, JDK10, JDK11 12.2 또는 12cR2 ojdbc8.jar JDK 8이 있는 12.1 또는 1..

    [Dbeaver] Tibero 연결하기

    🔥 포스팅 계기 디비버를 사용하면서 드라이버를 추가할 일이 자주 있는데, 이번에는 고객사에서 Tibero라는 DB를 씀 디비버에서 추가하려고 했더니 기본 설정에는 보이지 않아 추가하는 방법을 공부할 겸 기재해 놓음 📍 디비버(DBeaver)에 티베로(Tibero) DB 추가하는 법 👉🏻 1) 디비버 - 데이터베이스 - 드라이버 관리자 접속 👉🏻 2) settings 탭에 아래와 같이 기재 - Driver Name : Tibero - Class Name : com.tmax.tibero.jdbc.TbDriver - URL Template : jdbc:tibero:thin:@{host}[:{port}]:{database} - example : jdbc:tibero:thin:@127.0.0.1:8629:tibe..

    [자료 구조와 알고리즘] 스택(Stack)과 큐(Queue)

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 스택(Stack)의 개념과 구현 📍 스택(Stack) 👉🏻 단순한 규칙을 가지고 있는 리스트 👉🏻 FILO(First In Last Out): 먼저 들어온 데이터가 나중에 쓰이는 리스트 👉🏻 ex) 쌓은 그릇을 위에서부터 씀 👉🏻 먼저 들어온 데이터를 나중에 쓰기만 한다면 어떤 자료 구조를 쓰더라도 상관없음 : 데이터 삽입/삭제를 무조건 첫 번째 인덱스로 한다면 연결 리스트로도 구현 가능 👉🏻 차례가 중요할 때는 쓸모없으나 Ctrl + z(되돌리기), 자바 스크립트 괄호 문법 검사와 같은 기능에서는 매우! 유용! 📍 스택(Stack)의 구현 👉🏻 추상 자료형 정의 1. push - 데이터 삽입2. pop - 데이터 제거3. peek - top에 있는 데이터 ..

    [자료 구조와 알고리즘] 연결리스트(Linked list)

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 연결 리스트(Linked List) 📍 연결 리스트(Linked List) 👉🏻 저장하려는 데이터들을 분산해 할당하고 데이터들을 노드로 서로 연결해 줌 👉🏻 첫 노드의 주소를 알고 있으면, 연결되는 다음 데이터도 모두 알 수 있음 👉🏻 노드: 데이터를 담는 변수 하나와 다음 데이터를 가리키는 변수 1개를 가지고 있음 📍 장점 👉🏻 빈 메모리 공간 아무 곳에나 생성 후 연결만 해 주면 되기 때문에 초기 크기를 알지 않아도 됨 👉🏻 중간에 데이터를 삽입할 때도 다음 노드의 연결만 바꾸어 주면 되기 때문에 간편함 (삭제도 마찬가지) 📍 단점 👉🏻 데이터가 모두 떨어져 있어 바로 접근 불가능(4번째 노드에 접근하고 싶다면 첫 번째 노드를 기준으로 다음 데이터로 하나..

    [자료 구조와 알고리즘] 자바스크립트 실행 환경 구축과 배열

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 자바스크립트 실행 환경 구축 📍 vsCode, node.js 🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 배열 📍 프로그래밍 언어에서의 배열 👉🏻 프로그래밍 언어에서 제공하는 배열은 배열을 선언할 때 크기를 같이 할당해 줌 👉🏻 int arr[10] = {1, 2, 3, 4, 5}라면 열 개의 연속된 공간에 배열을 넣고, 남은 배열에는 쓰레기 값을 넣어 놓음 👉🏻 운영체제는 배열의 시작 주소만 기억하고 그 외의 값은 인덱스로 접근함 👉🏻 배열의 인덱스 참조는 길이에 상관없이 한 번에 가져옴 =. O(1)의 성능을 가짐 👉🏻 읽기, 쓰기와 같은 참조에서 좋은 성능을 보임 👉🏻 삽입, 수정, 삭제에서의 성능은 좋지 않음 기존에 할당된 데이터가 있고, 해당 크기..

    [자료 구조와 알고리즘] 시간 복잡도

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 시간 복잡도 📍 좋은 알고리즘은 무엇일까? 👉🏻 사용자의 요구에 따라 달라짐 (메모리 사용량, 속도 등) 👉🏻 보통은 속도를 좋은 알고리즘의 척도로 사용함 📍 시간 복잡도 👉🏻 특정 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간 👉🏻 단, 사용자마다 컴퓨터 사양이 다르므로 객관적 평가는 불가능 👉🏻 따라서 단순히 걸리는 시간이 아닌 '코드에서 성능에 많은 영향을 주는 부분(반복문의 수)'로 평가 주어진 배열에서 5를 찾으시오. [1, 3, 5, 7] 1) 처음부터 찾는다면? 👉🏻 3번째에 찾게 됨 👉🏻 하지만 이도 5가 어디 있느냐에 따라 달라짐(첫 번째에 찾을 수도 있고, 최악의 경우 배열의 길이만큼 걸림) 📍 표현법 👉🏻 Big-Ω[빅 오메가] 최선의 ..

    [자료 구조와 알고리즘] 자료 구조와 알고리즘이란?

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 자료 구조와 알고리즘 📍 프로그램 👉🏻 자료 구조와 알고리즘으로 이루어짐 👉🏻 자료 구조: 데이터가 어떤 구조로 저장되고 어떻게 사용되는지 나타냄 👉🏻 가장 단순한 자료 구조는 변수와 배열 일반 변수의 처리 방법 👉🏻 데이터 추가 시, 변수를 추가하고 계산하는 코드 수정해야 함 let a = 87; let b = 70; let c = 100; let average = (a+b+c) / 3 배열의 처리 방법 👉🏻 데이터 추가 시, 배열에 데이터만 추가하면 됨 let arr = [87, 70, 100]; let average = 0; for(let i = 0; i < arr.length; i++) { average ++ arr[i]; } average /= ar..

    [Eclipse-Git] commit 취소하는 법 (revert commit)

    개발을 하다 보면 COMMIT 후에 해당 코드를 다시 회수하고 싶을 수 있다. 테스트할 때는 발견하지 못한 오류를 발견한다든지 다른 방면으로 개발이 필요하다든지 암튼... 깃의 레포지토리를 내가 커밋하기 전 상태로 돌리는 법이 있는데, 이게 리버트다. 간단하게 말하면, 내가 커밋했던 코드를 커밋하기 이전 상태의 코드로 다시 덮어 씌우는 커밋을 날리는 것을 리버트(revert)라고 한다. 좋은 점은 내가 커밋한 후에 다른 사람이 커밋을 했더라도 리버트를 행할 수 있다는 것! 1. 이클립스 탭 History에서 취소할 commit 클릭 > Revert Commit 1번 작업을 진행하고 다시 History를 확인해 보면 아래와 같이 최신 commit이 바뀐 것을 확인할 수 있다. Revert "기존 커밋 메시..