배움 __IL 140

DFS / BFS 종합정리

DFS & BFSBFS와 DFS 정리BFS (너비 우선 탐색)탐색 순서만 구할 때목적: 그래프의 모든 노드를 방문하거나, 특정 노드를 찾고자 할 때.특징: 시작 노드에서 가까운 노드부터 차례대로 방문합니다. 큐(Queue)를 사용하여 구현하며, 레벨별로 탐색합니다.구현:from collections import dequedef bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for neighbor in graph[vertex]: i..

Hash Table 정리

Hash Table 탄생 배경 Direct Access Table 인 배열인덱스 방식으로, key-value쌍을 가져올 때 시간효율은 O(1)이므로 빠르다. 하지만 사용하지 않는 index에 대한 공간낭비가 상존함 1. 해시 함수의 조건 (1) 의의 특정 값을 원하는 범위의 자연수로 바꿔주는 함수 (2) 조건 1) 한 해시테이블의 해시 함수는 결정론적이어야 한다 같은 key 는 같은 결과가 나와야함 2) 결과 해시값이 치우치지 않고 고르게 나온다 각 리턴 값이 나올 확률이 비슷해야한다 3) 빠르게 계산 할 수있어야한다. 해시테이블은 연산할 때 마다 해시함수 사용함. 본 함수가 비효율적이면 해시테이블도 비효율적임 2. 해시함수 만들기 (1) 나누기 방법 자연수 key를 해시테이블의 크기로 나눈 나머지를 리..

알고리즘 3줄 정리 [DP : Memoization, ]

Dynamic Programming - Memoization 정리 핵심개념 피보나치 수열의 동적 프로그래밍과 메모이제이션 방식의 핵심은 중복 계산을 방지하기 위해 캐시를 사용하여 이미 계산된 값을 저장하고 재사용함으로써, 재귀 호출의 효율성을 높이고 시간 복잡도를 지수적인 O(2^n) 에서 선형적인 O(n)으로 줄이는 데에 있습니다. 기저 사례를 적절히 처리하여 재귀 호출의 종료 조건을 제공하며, 이를 통해 계산 속도를 크게 향상시킵니다.

알고리즘 3줄 정리 [합병정렬, 퀵정렬]

Divid and Conquer 의 형제 합병정렬 정리 핵심개념: 리스트를 반으로 나누고, 각 부분을 재귀적으로 정렬한 다음, 두 부분을 합병합니다. 시간복잡도: 최선, 평균, 최악 모두 O(nlogn) → + : 일관된 시간복잡도 공간복잡도: O(n) (추가 배열을 사용하기 때문에) → - : 추가 메모리 필요 퀵정렬 정리 핵심개념: 피벗을 선택하여 이보다 작은 요소와 큰 요소를 분할한 후(파티션), 각 부분을 재귀적으로 정렬합니다. 시간복잡도: 평균 O(nlogn), 최악 O(n2) (피벗 선택에 따라 달라짐) → + 평균적으로 빠름, 최악 크게 증가 공간복잡도: 평균 O(logn) (재귀의 깊이), 최악의 경우 O(n) (피벗 선택이 최악일 때) → + 추가 메모리 적게 소모 이름이 퀵정렬인 이유 ..

TIL : Extra-3(.class, stringBuilder)

I. .class What (정의) : 클래스나 타입의 메타데이터와 속성을 자바 런타임 환경에서 나타내는 역할이다. Why (존재이유) : Class객체에 접근하는것으로, 클리스의 정보(필드, 메소드, 생성자, 기타 세부정보)를 제공하는것이다. 그리고 동적으로 클래스를 조작하고 사용할 수있다. When (역사적 등장배경) : 자바 언어 초기부터 존재한 것으로서, 고급 자바기능과 프레임웍의 기초를 형성함 How (방법) : Class myClass = MyClass.class; e.g. (비유) : .class 를 건축에서 설계도 프린트 라고 생각하자! 건물의 구조와 특성은 건물(클래스)보다는 건물의 설계도(메타데이터)가 더 바람직하다. II. .stringBuilder java에서 문자열에서 일부 문자를..

TIL : Extra-2(enum, hashMap)

I.Index 1. enum 2. hashMap II. enum 자바 백엔드 개발 중 기존 회사의 코드에 enum 을 사용하는것을 보았다. 나는 사용해본적이 없어서 당황스러웠다. 기존 방식을 차용해서 새로운 기능 개발에 사용했지만, 그 필요성과 사용법은 아직 구체적으로 모른다. What (정의) : 서로 연관된 상수들의 집합을 의미한다. Enum은 열겨형(enumerated type)을 의미한다. 즉 하나이상의 상수 값을 정의하고, 그 값을 변수처럼 사용할 수있는 자료형이다. (과거 final static string 같은 방식으로 상수를 정의하는것과 달리) Why (존재이유) : 보다 구조적이고 의미있는 방법으로 다룰 수있게 해줌 -> 결국 상수를 단순히 정수로 보지않고, 객체지향적으로 객체화 해서 관..

TIL : Extra-1(Optional, 동시성, stream, Assertions, IllegalStateException)

I. Index 1. Optional 자료형 2. 동시성 문제 3. stream 4. Assertions (assertThat, ifPresent) 5. IllegalStateException II. Contents 1. Optional 자료형 What (정의) : Nullable한 값을 감싸는 래퍼클래스이다. 명시적으로 값이 없는 경우와 다를 수있으며, NullPointerException을 방지할수있음 Why (존재이유) : Null 안전성 향상 Null안전성 강화하기 위해서이다. NPS상황을 방지하고, 코드안전성을 향상시킴 가독성 향상 null체크와 관련된 복잡한 로직을 줄여줌 명시성 강화 값이 없을 경우에 대한 명시성을 코드에 반영이 가능함 예 //repository 에서... @Override ..

NginX의 필요성과 속성 실습(설치부터 로드밸런싱 실습)

I. 들어가며 1) Nginx를 공부하는 이유는 저마다 다양하다. 나에게 Nginx는 지난 몇달간 나에게 해결하지못한 숙제이다. Nginx를 피하는 것은 내 회사생활을 해태한다고 간주될 정도로 회사에서 쓰임이 자주있었고, 이는 곧 퇴근 후 공부하게끔 추동했다. 구체적으로 어떻게 쓰임이 있었냐하면... 현재 재직중인 회사 입사 시험은 Nginx & clojure 이고, 입사 후 맡아서 완료한 회사 홈페이지 리뉴얼 업무를 할 때에도 Nginx를 쓰였고, 내가 맡은 핀테크 서비스도 마찬가지로 NginX가 쓰이고 있다. 2) 이렇게 쓰이지만 나는 여전히 Nginx를 쓰는 이유를 공감하지 못하고 있었고, 그 방법도 모른채 Nginx 사용을 피하는 나자신을 조우했다. 가볍게 시작했고, 나와 같은 사람을 위해서 가볍..

TIL 1기를 끝내며...

I. 들어가며 지난 11월 29일부터 106개(비공개글 포함)의 TIL 을 쓴 TIL 1기를 마무리한다. 106개의 글은 뉴*처 선생님의 국비교육과정에서 해주신 강의를 기억하고자는 취지로 기록했다. 나의경우 교육과정을 마치기 전 취업했고, 과정 수료 후 몇일 뒤부터 출근했다. 출근한지 오늘부로 딱 2주가 되었다. 과정을 마무리하며 무엇을 느끼고, 취업을 해서 개발자로서 첫발을 내딛는데 내 마음가짐에 대해서 가볍게 남긴다. II. 국비교육과정의 시작과 끝 1. 시작 : 시작은 2022년 11월 23일이었다 1) 시험 불합격 발표와 포기 2019년 ~ 2022년 동안 공인노무사 시험 수험생이었다.(헌유예 불합격) 전문직 라이센스를 얻고싶었던 나는 20대 후반을 모두 받쳤지만 결국에 불합격의 고배를 마셨다. ..

TIL : 104번째- 230508 [5-2-월]

I. Vue.js인증권한 1. pinia (1) 필요성 1) store에 있는 전역객체는 말그대로 전역적으로 있지만 리액티브한것을 쓰기 위해서 피니아를 쓴다. 2) 피이나 설치는 - npm install pinia 를 한다. (2) 파일세팅 1) 파일명변경 폴더명을 stores 로 바꾸고 useUserDtailsStore.js 만들기 2)useUserDtailsStore.js import { defineStore } from "pinia"; export default useUserDetailsStore = defineStore("userDetails",{ }); 3) import { createApp } from 'vue' import { createRouter, createWebHashHistory }..