![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAAAd4%2Fbtr97nYOYUc%2FIhI6uPDmsy5kNSSAlksYh0%2Fimg.gif)
힙(Heap)- 힙(heap)은 데이터를 저장하고 조작하는 데 사용되는 트리 기반 자료구조- 일반적으로 힙은 완전 이진트리(complete binary tree)를 기반으로 하며, 부모 노드와 자식 노드 간의 대소 관계가 있다.- 최소 힙(min heap)은 부모 노드가 항상 자식 노드보다 작거나 같은 값을 가지는 힙을 말하며,- 최대 힙(max heap)은 부모 노드가 항상 자식 노드보다 크거나 같은 값을 가지는 힙을 말한다. 문제 1) 프로그래머스 - 더 맵게# heapq는 파이썬의 내장 라이브러리 중 하나로, 힙(heap) 자료구조를 제공하는 모듈# heapq 모듈은 리스트(list)를 힙 자료구조로 변환하고, 힙의 원소를 삽입하고 삭제하는 함수들을 제공한다.# heappush 함수는 힙에 원소를 ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPyYwQ%2Fbtr9Yl7C80a%2FxJk6eQjAAWQUi1FPHtzHJk%2Fimg.png)
해시(Hash)- 임의의 크기를 가진 데이터를 고정된 크기의 데이터로 매핑하는 함수문제 1) 프로그래머스: 완주하지 못한 선수 * 라이브러리 없이 풀이def solution(participant, completion): part = {} for person in participant: part[person] = part.get(person, 0) + 1 for person in completion: part[person] -= 1 result = [key for key, value in part.items() if value > 0] return result[0]이 코드의 시간 복잡도는 O(n)for 문을 사용하여 parti..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAfH8Q%2FbtscMIsdDHF%2FKeD4KcEm7IiKkKWd2RL4Zk%2Fimg.png)
collections 모듈에서 제공하는 OrderedDict는 키-값 쌍(key-value pairs)을 입력 순서를 유지하며 저장하는 딕셔너리이다.기본 파이썬 딕셔너리는 파이썬 3.7 이상부터 입력 순서를 보장하게 되었기 때문에, 현재 파이썬 버전에서는 일반 딕셔너리를 사용해도 입력 순서가 유지된다.그러나 이전 버전의 파이썬이나 명시적으로 순서가 보장되는 딕셔너리를 사용하고 싶을 때 OrderedDict를 사용할 수 있다.https://docs.python.org/ko/3.7/whatsnew/3.7.html# 파이썬 3.7의 새로운 기능 — Python 3.7.16 문서PEP 563 : 어노테이션의 지연된 평가 파이썬에서 형 힌트의 출현은 PEP 3107에서 추가되고 PEP 526에서 더욱 다듬어진 어..
코드 작성 원칙1) DRY(Don't repeat yourself)- 소프트웨어 개발에서 중복 코드를 최소화하고, 코드의 가독성과 유지보수성을 향상하기 위한 원칙- 코드를 함수나 모듈화된 구성요소로 분리하여 재사용 가능한 코드를 작성합니다.- 일반적인 코드 패턴을 사용하여 코드의 일관성을 유지합니다.- 유사한 코드를 별도의 함수나 모듈로 분리하여 코드를 줄입니다.2) KISS(Keep it simple, stupid)- 불필요한 복잡성을 최소화하고, 코드의 이해와 유지보수를 쉽게 만들기 위한 것- 간단한 구조를 사용하여 복잡성을 최소화합니다.- 기능을 가능한 작게 유지합니다.- 최대한 적은 리소스를 사용하여 문제를 해결합니다.- 읽기 쉬운 코드를 작성하고, 이해하기 쉬운 변수 이름과 주석을 사용합니다. ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS3jRW%2Fbtr9AkbwYEc%2FGt5aDstEFYvpkkBdZkx171%2Fimg.png)
큐(Queues)- 자료의 입력과 출력이 각각 한쪽 끝에서 이루어지는 자료 구조 = 'FIFO(First-In-First-Out) 구조'- 대표적인 선형 자료구조로, 삽입(insert)과 삭제(delete)를 수행- 큐는 보통 배열(array)이나 연결 리스트(linked list)로 구현- 큐에 데이터를 삽입하는 것을 '인큐(Enqueue)'- 큐에서 데이터를 꺼내는 것을 '디큐(Dequeue)'- 선입선출* 스택은 후입선출 1) 큐의 연산- Enqueue(item) : 큐의 끝(rear)에 item을 추가 O(1)- Dequeue() : 큐의 첫(front) 항목을 반환(큐에서 제거 O) O(n)- isEmpty() : 큐가 비어 있는지 검사 O(1)- peek() : 큐의 첫(front) 항목을 반..
연결리스트(Linked Lists)- 데이터의 논리적 순서를 유지하면서, 물리적인 저장 위치는 다를 수 있는 데이터 구조- 데이터의 추가, 삭제가 빈번한 상황에서 유용하게 사용된다.- 연결 리스트는 노드(Node)들의 연결로 구성되며, 각 노드는 데이터와 포인터(Pointer)로 구성된다.* 포인터는 다음 노드를 가리키는 포인터(next 포인터)와 이전 노드를 가리키는 포인터(prev 포인터)가 있다.* 데이터는 노드에 저장하는 값이다.- 이러한 구조 때문에 연결 리스트는 단방향 연결 리스트(Singly Linked List)와 양방향 연결 리스트(Doubly Linked List)로 구분된다. 단방향 연결 리스트(Singly Linked List)- 각 노드는 다음 노드를 가리키는 포인터(next 포인..
자료구조- 데이터를 효율적으로 조직화, 저장 및 관리하기 위한 방법을 제공예시) 배열(Array)은 데이터를 순차적으로 접근하기에 적합한 자료구조 알고리즘- 어떤 문제를 해결하기 위한 절차나 방법론- 주어진 문제의 해결을 위한 자료구조와 연산 방법에 대한 선택 자료구조와 알고리즘의 관계- 적절한 자료구조를 선택하면 문제를 해결하는 알고리즘의 성능을 향상 선형 배열(Linear Arrays)- 선형 배열(Linear Array)은 데이터를 일렬로 저장하는 자료구조- 일반적으로 인덱스를 사용하여 각 요소에 접근할 수 있고 Python에서는 리스트(List)라는 데이터형- 메모리 상에서 연속된 공간에 데이터를 저장하며, 데이터를 빠르게 접근 가능- 데이터를 순서대로 저장하며, 인덱스를 사용하기 때문에 원하는 ..
코딩 테스트에 대한 대비 방법1. 구현 능력 갖추기- 프로그래밍 언어 학습(Python, Java, C/C++)2. 자료구조 이해- Array, Stack/Queue, Hash/Map, Tree, Graph3. 기초 알고리즘 및 시간 / 공간 복잡도에 대한 이해- 시간 복잡도: 알고리즘이나 프로그램이 실행되는 동안 소요되는 시간의 양- 공간 복잡도: 알고리즘이나 프로그램이 실행되는 동안 소요되는 메모리 공간의 양* 시간 복잡도가 낮으면 공간 복잡도가 높아지고, 공간 복잡도가 낮으면 시간 복잡도가 높아진다.4. 현실 문제 해결을 위한 알고리즘 적용 훈련5. 제한 시간 내에 오류 없이 코드 작성 및 디버깅할 수 있는 능력 훈련 효율적 / 효과적1) 효과적으로 해결하는 것?2) 효율적으로 해결하는 것?- 효과..
사용자(클라이언트)의 인증 정보를 포함하고 있는 Cookie와 Session 쿠키의 탄생 사용자(클라이언트)의 IP 주소와 User-Agent는 매번 변경되며 고유하지 않은 정보로, HTTP 프로토콜의 Connectionless와 Stateless 특징 때문에 웹 서버는 사용자(클라이언트)를 기억할 수 없다. HTTP 프로토콜 Connectionless 하나의 요청에 하나의 응답을 한 후에 연결을 종료한다. Stateless 통신이 끝난 후 상태 정보를 저장하지 않는다. => 서버가 많은 사용자(클라이언트) 연결을 추적할 필요가 없기 때문에(HTTP 확장 가능) => 이런 특성들 인해 HTTP상에서 상태 유지를 위해서 쿠키가 탄생했다. => 쿠키는 사용자(클라이언트)의 정보와 상태를 담고 있다. 쿠키의 ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ5jjA%2FbtrVzz1spzv%2FXyRuKrdNDOB3I292KOXEr0%2Fimg.png)
1. JSON Web Token란? => 유저를 인증하고 식별하기 위한 토큰 기반 인증 => 흔하게 회원 인증 / 정보 교류에 쓰인다. JWT는 JSON 객체를 사용하는 쌍방 간의 데이터와 정보를 안전하게 전송하는 독립적인 방법이다. => 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함 된다. 각각의 JWT는 전자서명이 가능하기 때문에 JWT는 신뢰할 수 있다. 이는 서버가 JWT의 변경이 된 사항들을 알 수 있게 한다. => 전자서명은 Header, Payload가 변조되었는지 확인하기 위해 사용되는 정보이며 JWT를 신뢰할 수 있는 토큰으로 사용할 수 있는 근거가 된다. JWT는 기본 인증 및 다이제스트 인증 방식과 다르게 권한 부여 방식이다. => 서버에서 세션을 계속해서 유지..