본문 바로가기

전체 글

(150)
Python) 30804번 과일탕후루 (슬라이딩 윈도우) https://www.acmicpc.net/problem/308041. 문제 소개이번 포스팅에서는 백준의 과일 탕후루 문제(30804번)를 해결하면서 슬라이딩 윈도우라는 새로운 개념을 배웠던 경험을 기록해두려고 합니다. 문제는 과일을 스틱에 꽂았을 때, 두 종류의 과일만 남길 수 있도록 과일을 제거하고, 가장 긴 구간을 찾는 내용입니다.문제 요약과일 N개의 목록이 주어집니다.우리는 과일의 앞이나 뒤에서 하나씩 과일을 제거할 수 있습니다.이때, 두 가지 종류의 과일만 남도록 할 수 있는 가장 긴 구간을 구하는 것이 목표입니다.2. 슬라이딩 윈도우 개념 정리문제를 풀면서 처음 접한 개념이 슬라이딩 윈도우였는데, 이 방식은 주어진 리스트에서 특정 조건을 만족하는 연속된 구간을 찾아내는 방법이에요. 기본적으로 ..
이더리움 스마트 컨트랙트 이더리움의 두 가지 계정 유형이더리움 네트워크에서 작동하는 모든 엔티티는 외부 소유 계정(EOA) 또는 컨트랙트 계정(CA)의 형태를 가진다. EOA (Externally Owned Account):EOA는 사용자가 개인 키를 통해 제어하는 계정. EOA는 거래를 생성하고 이더를 전송하거나, 스마트 컨트랙트와 상호작용할 수 있다.EOA는 일반적인 사용자 계정으로, 트랜잭션의 서명을 통해 이더리움 네트워크와 상호작용한다. 중요한 점은, 개인 키를 통해 거래의 승인 및 실행이 이루어진다는 것이다.CA (Contract Account):CA는 스마트 컨트랙트를 배포함으로써 생성되는 계정이다. CA는 코드로 제어되며, 외부 트랜잭션이 전달될 때마다 자동으로 그 코드에 따라 실행된다.EOA와 달리 CA는 거래를 ..
Python) 백준 1463번: dp, 1로 만들기 https://www.acmicpc.net/problem/1463숫자 N이 주어졌을 때, 1로 만드는 최소 연산 횟수를 구하는 문제이다.1. 3으로 나누어떨어지면, 3으로 나누는 연산 2. 2로 나누어떨어지면, 2로 나누는 연산 3. 1을 빼는 연산이 문제는 Dynamic Programming(동적 계획법)을 사용하여 해결할 수 있다. import sysinput = sys.stdin.readlinedef make_one(n): dp = [0] * (n + 1) for i in range(2, n + 1): if i % 2 == 0: a = dp[i // 2] + 1 else: a = float('inf') ..
Sort) Quick Sort, Merge Sort, Heap Sort 1. 퀵 정렬 (Quick Sort): O(n log n) ~ O(n²) def quick_sort(arr): if len(arr) pivot] return quick_sort(left) + middle + quick_sort(right) 2. 병합 정렬 (Merge Sort): O(n log n) def merge_sort(arr): if len(arr)  3. 힙 정렬 (Heap Sort): O(n log n)import heapqdef heap_sort(arr): heapq.heapify(arr) # 리스트를 힙으로 변환 return [heapq.heappop(arr) for _ in range(len(arr))]
Sort) Bubble Sort, Selection Sort, Insertion Sort 1. 버블 정렬 (Bubble Sort):  O(n²)def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr 2. 선택 정렬 (Selection Sort): O(n²) def selection_sort(arr): n = len(arr) for i in range(n): min_idx = i for j in range(i+1, n): if arr[j]  3. 삽입 정렬 ..
Pyton) 정렬 함수 사용 및 lambda numbers = [5, 2, 9, 1, 7]words = ["apple", "banana", "cherry", "date"]items = [(1, 'apple'), (2, 'banana'), (3, 'cherry')]#sorted() 함수sorted_numbers = sorted(numbers)sorted_numbers_desc=sorted(numbers, reverse=True)sorted_words = sorted(words, key=len)#list.sort()numbers.sort()numbers.sort(reverse=True)word.sort(key=len)# 튜플 리스트에서 두 번째 값을 기준으로 정렬sorted_items = sorted(items, key=lambda item: item..
블록 크기, 포크, 오디널즈 1. 블록 크기와 확장 솔루션비트코인의 블록 크기는 한 블록에서 처리할 수 있는 거래 수를 결정하는 중요한 요소이다. 기본적으로 비트코인의 블록 크기는 1MB로 제한되어 있어, 거래가 몰릴 때는 네트워크 혼잡과 거래 처리 지연이 발생할 수 있다.1.1 블록 크기 증가이 문제를 해결하기 위해 블록 크기를 늘려 한 번에 더 많은 거래를 처리할 수 있도록 하자는 의견이 나왔다. 그중 대표적인 제안이 SegWit2x있다.SegWit2x: SegWit과 블록 크기 증가를 결합한 것이다. SegWit은 거래 서명 데이터를 별도의 공간에 저장함으로써 블록 내 공간을 효율적으로 사용하는 방식이다. "2x"는 블록 크기를 2MB로 증가시키려는 제안이지만, 커뮤니티 내에서 큰 논란을 일으켰다.확장성 문제를 해결하는 방법에..
암호기술과 채굴의 이해 1. 블록체인의 암호기술크립토그래픽 해시함수 (단방향 알고리즘)SHA256-HASH:고정된 길이의 출력을 생성.동일한 입력에 대해 항상 같은 출력을 제공.입력 데이터가 조금이라도 변경되면 완전히 다른 출력이 생성.역연산이 불가능하여 보안성이 높음.비대칭키 암호 (양방향 알고리즘)대칭키 암호: 송신자와 수신자가 동일한 키를 공유.비대칭키 암호: 개인키와 공개키를 사용하여 보안성을 강화.타원곡선 암호화: 개인키와 공개키, 디지털 서명 등을 활용하여 지갑 주소를 생성.프로세스: 개인키 → 공개키 → 주소2. 채굴의 역할사용자와 채굴자의 차이사용자:비트코인을 송수신하고 거래를 진행합.개인 지갑(라이트노드)을 사용하여 자신의 거래를 관리.채굴자:비트코인 거래 내역을 기록하고 검증하는 역할.풀노드/채굴노드 및 채굴..

728x90
반응형