728x90
반응형

Algorithm 22

데이터 암호화의 기본: 대칭키(Symmetric key)와 비대칭키(Asymmetric key) 알고리즘 이해하기

현대 사회에서 데이터들의 보안은 날이 갈수록 중요해지고 있습니다. 이런 데이터 및 개인정보를 어떻게 안전하게 보호해야할지 고민이 커져가고 있는가운데, 가장 기본적으로 사용하고 있는 대칭키와 비대칭키 암호화 방식을 알아보려고합니다. 이 두 방식은 다양한 상황과 서로 다른 목적으로 사용됩니다. 대칭키(Symmetric Key) 암호화 대칭키 암호화는 데이터를 암호화하고 복호화할 때 동일한 키를 사용하는 방식입니다. 이는 일상생활에서 사용하는 자물쇠 잠금 방식과 비슷합니다. 데이터를 암호화할 때 특정 키를 사용하면, 복호화할 때도 반드시 동일한 키가 필요합니다.장점속도가 빠르다: 대칭키는 상대적으로 연산이 간단해 대용량 데이터를 빠르게 암호화하고 복호화할 수 있다.키 관리가 쉽다: 하나의 키만 있으면 되므로 ..

Algorithm 2024.10.21

비트코인 채굴의 원리와 보상 구조: 초보자를 위한 가이드

비트코인 투자를 준비하며, 비트코인을 얻는 방법에 대해 알아보겠습니다. 비트코인은 자신의 컴퓨팅 파워(CPU, GPU 연산을 이용한 전력)를 이용해 작업을 증명(Proof Of Work, 쉽게 말해 수학 문제)하고 그 대가로 얻을 수 있습니다. 여기서 '작업'이란, 다른사람들의 트랜잭션(송금 내용 등)을 포함해서 복잡한 수학 문제를 해결하는 과정을 말합니다. 이 과정을 '채굴'이라고 하며, 채굴자들은 네트워크의 거래를 검증하고 이를 새로운 블록에 추가합니다. 다른사람들이 수행한 작업 블록을 생성하는 것은 블록체인 구조에서 체인에 블록을 추가하는 것을 의미하며, 이 블록은 모든 노드가 공유하는 데이터베이스의 일부입니다.※ 이 글에서 나오는 네트워크는 컴퓨터용어인 네트워크보다 집단이라는 단어로 이해하면 이해..

Algorithm 2024.06.27

비트코인 채굴의 이해: 작업 증명 알고리즘의 원리와 과정

비트코인 투자를 고민 중인데, 개발자로서 비트코인과 관련된 기술을 이해하고 투자하는것이 좋다고 판단해 정리해보는 시간을 갖으려고한다. 비트코인은 블록체인 기술 위에서 동작하는 암호화폐로 블록체인에 블록을 추가하면 그 보상으로 비트코인을 주는 구조로 되어있다. 이 블록체인의 블록을 추가하기위해서 어떤 과정을 거치는지 오늘 알아보려고한다.작업증명이란작업 증명(Proof of Work, PoW) 알고리즘은 암호화폐 네트워크의 거래를 검증하고 새로운 블록을 추가하는 과정을 통해 네트워크의 안전성을 보장하는 합의 메커니즘입니다. 작업 증명 알고리즘은 다음과 같은 원리와 과정으로 작동합니다:기본 원리작업 증명은 네트워크 참여자(채굴자)가 복잡한 수학적 문제를 해결하는 데 컴퓨터 자원을 사용하는 알고리즘입니다. 이 ..

Algorithm 2024.06.26

[Algorithm] C++ 대문자를 소문자로 바꾸기(feat. transform() 사용하기)

C++에 다양한 테크닉이 존재한다는걸 느낀다. 내가알기로 python에는 .lowercase라는 함수가 있어서 사용하면 소문자로 바꿔주는 것으로 알고있다. c++에는 없어 검색해보았고 이참에 정리해보기로 하였다. 사실 알면 간단하다. Reference template OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op); first1부터 last1까지의 범위까지 unary_op 를 수행한다. 그 수행한 결과를 d_first 부터 기록한다. 예제 따라서 대문자로 바꾸거나 소문자로 바꾸기 위해서는 다음과 같이 사용한다. 대문자 to 소문자 void lowercase(string s) { trans..

Algorithm 2022.01.28

[Algorithm] C++ 문자열 공백 포함해서 입력받기(feat. getline(), cin.getline() 사용하기)

알고리즘 문제를 풀다보면 띄어쓰기 문자열을 입력받는 경우가 많다. int형은 익숙한데 문자열을 다루는 것에 익숙하지 않아 이참에 정리하고자 한다.문자열 입력받는 방법(공백 없음) - char 와 scanf 이용해서 입력받기#include #include using namespace std;int main() { cout  - char 와 cin 이용해서 입력받기#include #include using namespace std;int main() { cout > day; cout - string과 cin으로 입력 받기#include #include #include using namespace std;int main() { cout > day; cout 위와같은 방법은 공백없이 ..

Algorithm 2022.01.22

[Algorithm] priority_queue 비교연산자 구현 (feat. struct compare, 외우기 쉬운 방법)

알고리즘 문제를 풀다보면 priority_queue에 int형이 아닌 pair를 이용하고 struct를 이용할 때가 있어서 내가 원하는 순서대로 priority_queue를 출력하려면 비교연산자를 재정의 해주어야한다. 오늘은 어떻게 priority_queue의 비교연산자를 구현하는지 알아보도록 하자. c++에서 sort 함수를 사용할 때, 사용자가 원하는 순서대로 정렬하고 싶으면 cmp 함수를 따로 만들어서 사용하였다. #include #include bool cmp(int a, int b) { return a < b; } int main() { vector v; v.push_back(1); v.push_back(3); v.push_back(2); sort(v.begin(),v.end(),cmp); } ..

Algorithm 2022.01.21

[LeetCode 142] 142. Linked List Cycle II(feat. 플로이드의 순환찾기 알고리즘)

영어로 문제를 푼다는것은 자신감을 떨어뜨리고 내가 맞게 해석했는지 의문이 든다... 리트코드에 적응하면 조금은 괜찮아질거라 믿으며 글을쓴다. 이 문제는 모르면 못푸는 문제이다. 몰라서 못풀었고 토끼와 거북이 알고리즘이란 것을 알게되어 배움의 의미로 글을 작성한다. 토끼와 거북이 알고리즘이란 토끼와 거북이 알고리즘은 LinkedList에서 순환 루프 여부를 확인하고 순환 루프의 시작 노드를 알아내는 데 사용되는 알고리즘이다. 자세한 증명 과정은 다음과 같다. 코드 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; ..

Algorithm 2022.01.20

[C++] string::to_string 사용하기(feat. int, double, float -> stirng 변환)

알고리즘 문제를 풀다보면 string을 int로 int를 string으로 변환해야하는경우가 생긴다. 오늘은 그중에서 int를 string으로 변환하는 to_string 함수에대해 알아보도록 하겠다. 헤더파일 std::to_string 함수를 사용하려면 헤더 파일을 선언 해주어야 한다. #include 예제 #include #include using namespace std; int main(void) { int Inumber = 20; double Dnumber = 3.0; //int를 string으로 변환 string str = to_string(Inumber); cout

Algorithm 2022.01.02

[C++] string 자르는 2가지 방법(feat. istringstream 이용하기, substr 이용하기)

C++을 사용하다보면 문자열을 자를 때, python과 Java와 다르게 .split()이라는 내장함수가 없기 때문에 다른방법으로 만들어서 사용해야한다. C++에서 간단하게 문자열을 자르는 방법 두가지를 작성하려고 한다. stringstream을 이용해서 자르는 방법 앞선 글에서 기본적인 stringstream에 대해서 알아보았다. 과연 istringstream과 stringstream과의 차이점은 무엇일까?2021.12.31 - [Algorithm] - [C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?) [C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?)C++에서 문자열을 공백과 \n 을 기준으로 int형 string형 float형 등..

Algorithm 2021.12.31

[C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?)

C++에서 문자열을 공백과 \n 을 기준으로 int형 string형 float형 등 다양하게 자를 수 있도록 하는 stringstream이 존재한다. 이것을 어떻게 쓰는지 알아보도록 하자. stringstream을 설명하기 전에 stream은 무엇인지 알아보도록 하겠다.스트림(stream)C++ 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)을 통해 다룬다.스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다.즉, 스트림은 운영체제가 입력과 출력을 다루기 위해 가상으로 만들어 준 것으로 중간 역할을 한다.버퍼(buffer)스트림은 내부에 버퍼(buffer)라는 임시 메모리 공간을 가진다.버퍼를 이용하면 프로그램의 입출력을 효율적으로 처리할 ..

Algorithm 2021.12.31
728x90
반응형