전체 글 188

파이썬 type hinting - 공부하는 도비

type hinting 이란, 말 그대로 파이썬 코드를 작성할 때 타입에 대한 힌트(정보)를 제공하는 것입니다. 오늘은 파이썬 함수에 한정해서 type hinting에 대해 설명해보겠습니다. 파이썬에 타입 힌팅이 추가되기 전에는, 주석을 사용하여 타입에 대한 정보를 줘야 했습니다. 코드를 직접 작성한 개발자에게는 도움이 될지는 모르지만, 정해진 표준이 없어서 개인마다 주석의 의미가 다르게 이해될 수 있었습니다. hint는 함수의 매개변수와 리턴 값의 자료형이 무엇인지 명시적으로 표현해줍니다. 바로 예제를 보겠습니다. def fun_mul(x : int) -> tuple: y1 = x * 100 y2 = x * 200 y3 = x * 300 return y1, y2, y3 result = fun_mul(1..

Python/Python Basic 2022.12.02

한글 오피스 2020 실행, 삭제 안되는 오류 고치기 - 공부하는 도비

이번에 윈도우 10에서 11로 업데이트를 진행했습니다. 그러면서 윈도우 10에서 발생 안 했던 오류가 엄청나게 나왔고.. 한글 파일도 오류가 발생했습니다. 제어판에서도 삭제가 안되니 참 답답했는데, 제가 한 방법으로 오류를 고칠 수 있으니 따라 해 보시면 될 거 같습니다. 우선 한글에서 쓰는 Visual C++ 파일이 있는데, 저 파일들이 제대로 설치되지 않거나 중복돼있는 경우 위와 같은 오류가 발생합니다. 1. 설정 => 앱 => 설치된 앱 2. 아래 두 파일을 삭제 - Microsoft Visual C++ 2013 Redistributable (x86) - Microsoft Visual C++ 2015 Redistributable (x86) (한글 오피스 버전마다 파일의 이름이 다르긴 한데, 이 경우..

Basic IT Knowledge 2022.12.01

C언어 구조체 연결 리스트 - 공부하는 도비

연결 리스트란, 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조입니다. 아래 그림처럼 Link 필드(포인터 필드)에 다음이나 이전 노드의 주소 값을 저장하여 각 노드를 연결합니다. 오늘은 구조체를 사용하여 연결 리스트를 구현해보겠습니다. C언어에서 연결리스트의 노드 종류는 크게 머리 노드와 일반 노드로 나뉩니다. - 머리노드(head node) : 단일 연결 리스트의 기준점이며, 첫 번째 노드를 가리키는 용도로 사용됩니다. 이 노드엔 데이터를 저장하지 않습니다. - 일반 노드 : 연결 리스트에서 데이터가 저장되는 실제 노드를 의미합니다. 맨 마지막 노드의 Link 필드엔 NULL 값이 들어갑니다. 구조체를 이용하여 연결 리스트 구현 #include #inc..

C Programming 2022.11.23

문자열 복사 (strcpy) - 공부하는 도비

C언어에는 문자열을 복사하는 함수 strcpy가 있다. 파이썬을 쓰다가 오랜만에 C를 쓰려고 하니, 파이썬에서 쉽게 되던 문법이 C언어에선 작동 안 되는 경우가 많다. 예를 들어, 아래 코드 처럼 두 문자열 a, b가 있을 때 b = a 또는 a = b 를 해도 문제가 없다. # 파이썬 문자열 복사 a = 'Dobby' b = 'Free' print("a의 문자열 : %s" %a) print("b의 문자열 : %s\n" %b) print("!! a를 b에 복사 !!") b = a print("복사된 b의 문자열 : %s" %b); 하지만, C에서 저런 문법을 썼다가는 아래와 같은 오류가 발생한다. (error: assignment to expression with array type) 파이썬처럼 문자열을..

C Programming 2022.11.22

문자열 비교 (strcmp) - 공부하는 도비

C언어에는 문자열을 비교해주는 함수 strcmp가 있습니다. 아래 표처럼, 입력된 두 문자열이 같다면 0이 출력됩니다. 만약, 두 문자열이 다른 경우에는 입력된 문자열의 첫 번째 알파벳의 사전적 순서에 따라 출력 결과가 달라집니다. 첫 번째 배열의 사전적 순서가 두번째 보다 빠르면 -1을 출력하고, 그렇지 않다면 1을 출력합니다. #include #include int main() { char input_1[10] = "A"; char input_2[10] = "A"; printf("문자열 비교 : %d", strcmp(input_1, input_2)); return 0; } #include #include int main() { char input_1[10] = "A"; char input_2[10] ..

C Programming 2022.11.22

C언어 문자열 길이 출력 (strlen) - 공부하는 도비

오늘은 문자열을 입력받고 그 문자열의 길이를 출력해보겠습니다. 문자열의 길이를 출력하는 방법엔 크게 두 가지가 있는데, 하나는 count를 올리면서 입력된 문자열의 길이를 출력하는 것이고, 나머지 하나는 strlen 함수를 사용하는 것입니다. C언어에서는 문자열의 맨 마지막 인덱스에 NULL 값이 저장되는 약속이 있습니다. 이 정보를 이용하여 길이를 출력해보겠습니다. #include int main() { char input[1000]; // 엔터가 입력될 때까지, 문자열을 입력 받음 gets(input); int count = 0; // 문자열의 맨 마지막 인덱스에는 Null('\0') 값이 저장됨 while (input[count] != '\0') { count++; } printf("입력한 문자열의..

C Programming 2022.11.22

SHA256을 이용한 File 무결성 확인 - 공부하는 도비

지난 피드에서 파이썬 SHA256이나 MD5 사용법에 대해 알아보았습니다. 2022.11.21 - [파이썬/프로젝트] - [파이썬] hashlib의 SHA 사용 - 공부하는 도비 [파이썬] hashlib의 SHA 사용 - 공부하는 도비 SHA는 "Secure Hash Algorithm"의 약자로 1993년 미국의 NSA가 만들고 미국 국립 표준 기술 연구소에서 표준으로 제정한 해시 함수입니다. SHA는 SHA-0, SHA-1, SHA-2, SHA-3 순으로 발전되어 왔습니다. 자세한 내 yang-wistory1009.tistory.com 2022.11.21 - [파이썬/프로젝트] - [파이썬] hashlib의 MD5 사용 - 공부하는 도비 [파이썬] hashlib의 MD5 사용 - 공부하는 도비 MD5는..

Python/Project 2022.11.21

if __name__=='__main__': - 공부하는 도비

파이썬은 작성한 코드가 위에서 아래로 한 줄씩 해석되어 실행 결과를 내놓는 인터프리터 언어입니다. 반면, C나 C++ 같은 컴파일 프로그래밍 언어는 시작점이 항상 main() 함수입니다. 파이썬의 경우, main() 함수 역할을 하는 것은 다음과 같습니다. (편의를 위해 __main__으로 표현하겠습니다.) if __name__ == '__main__': 파이썬은 소스코드를 실행할 때, 위와 같은 코드가 있으면 작성된 코드의 순서와 상관없이 저 함수 안에 작성된 코드를 먼저 실행합니다. 파이썬의 __main__함수와 C/C++의 main() 함수, 두 가지의 가장 큰 차이는 파이썬의 main은 파이썬 소스코드 파일 별로 하나씩 있을 수 있지만, C/C++의 main은 프로그램을 구성하는 소스코드 전반에 ..

Python/Python Basic 2022.11.21

hashlib의 SHA 사용 - 공부하는 도비

SHA는 "Secure Hash Algorithm"의 약자로 1993년 미국의 NSA가 만들고 미국 국립 표준 기술 연구소에서 표준으로 제정한 해시 함수입니다. SHA는 SHA-0, SHA-1, SHA-2, SHA-3 순으로 발전되어 왔습니다. 자세한 내용은 아래 위키 백과를 참고해주세요. https://ko.wikipedia.org/wiki/SHA SHA - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 이들 함수는 미국 국가안보국(NSA)이 1993년에 처음으로 설 ko.wikipedia.org 파이썬은 SHA-2, SHA-3 시리즈의 SHA-256, SH..

Python/Project 2022.11.21

hashlib의 MD5 사용 - 공부하는 도비

MD5는 "Message-Digest algorithm 5"의 약자로 1991년 만들어진 128bit 길이의 해시값을 출력하는 해시함수입니다. 자세한 내용은 아래 위키백과를 참고해주세요. https://ko.wikipedia.org/wiki/MD5 MD5 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 ko.wikipedia.org 파이썬에서 MD5 해시함수를 사용하려면 파이썬 자체에서 제공하는 hashlib 모듈의 md5나 Pycryptodome 모듈에서 제공하는 MD5를 임포트 하면 ..

Python/Project 2022.11.21

update()함수로 dictionary 업데이트 하기 - 공부하는 도비

오늘은 dictionary 자료형 함수인 update()를 알아보도록 하겠습니다. dictionary에 대한 자세한 내용은 아래 링크를 참고해주세요. 2020.06.09 - [파이썬/파이썬 이론] - [파이썬] 파이썬 Dictionary, get(), keys(), values(), items() 사용법, 파이썬 mapping type - 공부하는 도비 [파이썬] 파이썬 Dictionary, get(), keys(), values(), items() 사용법, 파이썬 mapping type - 공부하는 도비 - mapping type : mapping object는 값의 대응 관계를 표시하여 임의의 key 값으로 value를 찾습니다. 파이썬의 mapping type은 Dictionary가 유일하고, 순서..

Python/Python Basic 2022.11.21

단일 치환 암호 해독 (패턴 분석 공격) - 공부하는 도비

단일 치환 암호는 무차별 대입 공격이나 빈도수 분석을 통하여 암호문을 해독할 수 있습니다. 오늘은 단일 치환 암호를 해독하는 방법 중 패턴 분석을 사용하여 암호를 분석해보려고 합니다. 패턴 분석 방법은 Known plaintext Attack 방법 중 하나로, "공격자가 일정 부분의 평문과 이에 대응하는 암호문을 가진 상태에서 공격하는 유형"을 의미합니다. 알려진 평문 공격을 하면, 단순히 무차별 대입 공격이나 빈도수 분석을 하는 것보다 암호문 해독이 더 수월해집니다. 예시를 통하여 패턴 분석을 해보도록 하겠습니다. 아래는 단일 치환 암호로 암호화 한 문장입니다. 만약 빈도수 분석을 하면, 여기서 가장 많이 나온 글자를 찾아 알바벳 빈두수에 따라 하나하나 치환하며 암호문을 해독해야 합니다. 위 암호문에 ..

Python/Project 2022.11.14

C언어 2차원 배열 동적 메모리 할당 후, 두 행렬의 곱 출력 - 공부하는 도비

사용자로부터 (n *n) 크기의 정방 행렬 두 개를 입력받은 후, 두 행렬의 곱(Matrix Multiplication) 출력 ● 입력 : 정수 하나를 입력 받음 2를 입력하면, (2 * 2) 행렬 2개에 대한 정수를 입력해야하므로, 각각 4가지 원소, 즉 8개 입력 4를 입력하면, (4 * 4) 행렬 2개에 대한 정수를 입력해야하므로, 각각 16가지 원소, 즉 32개 입력 ● 출력 : 입력한 두 행렬의 곱을 계산 후 출력 ● 예시 입력 ● 소스코드 #include #include int main(void) { int num; int sum_value = 0; int temp = 0; int **arr; printf("행렬의 크기 (n X n) => n : "); scanf("%d", &num); arr..

C Programming 2022.11.06

C언어 2차원 동적 메모리 할당 - 공부하는 도비

오늘은 2차원 배열을 선언하는 것처럼,2차원 동적 메모리 할당에 대해 알아보겠습니다. 지난 피드에서 C언어 동적 메모리 할당을 알아보았습니다. 자세한 내용은 아래 링크를 참고해주세요. 2022.11.06 - [C언어] - [C언어] 동적 메모리 할당을 통해 배열처럼 사용하기(mallloc(), calloc()) - 공부하는 도비 [C언어] 동적 메모리 할당을 통해 배열처럼 사용하기(mallloc(), calloc()) - 공부하는 도비 동적 메모리 할당 (Dynamic Memory Allocation) 프로그램 실행 도중 필요한 만큼 힙(heap) 영역의 메모리를 할당 받아 사용하는 방식입니다. 동적 메모리 할당시에는 malloc() 함수와 calloc() 함수가 있는데, yang-wistory1009...

C Programming 2022.11.06

동적 메모리 할당을 통해 배열처럼 사용하기(mallloc(), calloc()) - 공부하는 도비

동적 메모리 할당 (Dynamic Memory Allocation) 프로그램 실행 도중 필요한 만큼 힙(heap) 영역의 메모리를 할당 받아 사용하는 방식입니다. 동적 메모리 할당시에는 malloc() 함수와 calloc() 함수가 있는데, 우선 malloc()을 먼저 보겠습니다. 1. malloc() 하나의 인자로 할당 메모리 크기를 결정하고, 메모리 할당을 해제하기 위해선 free() 함수를 사용합니다. malloc()과 free() 함수 모두 stdlib.h 헤더 파일에 정의되어있어, 두 함수를 사용시 해당 헤더파일을 포함시켜야합니다. 아래 그림은 malloc을 사용하여 크기 3만큼의 메모리를 할당받는 예 입니다 . 동적할당을 마치 배열 처럼 사용할 수 있는데요, 아래 예시 코드를 살펴보겠습니다. ..

C Programming 2022.11.06

C언어 레지스터 변수 - 공부하는 도비

C언어를 사용하며 선언한 대부분의 변수는 메모리의 일정 공간을 할당받아 변수를 선언하고, 연산을 위해 CPU 내부 레지스터(register)로 복사되어 연산을 수행합니다. 또한, 저장이 필요한 경우 다시 레지스터 값을 메모리에 저장을 합니다. 따라서, 메모리를 읽어 레지스터로 복사하는 과정과 다시 레지스터에서 변경된 값을 메모리에 쓰는 과정이 필요합니다. 이러한 과정을 거치지 않기 위해서 C언어는 레지스터 변수라는 것을 사용합니다. 레지스터 변수 메모리가 아닌 레지스터 공간에 할당하여 사용하는 변수 레지스터 변수의 가장 큰 장점은 메모리 접근이 이뤄지지 않기 때문에, CPU 내부에서 빠른 연산을 통한 프로그램 전체 성능에 도움을 줍니다. 아래 그림처럼, 일반적인 변수는 선언한 변수가 메모리의 일부분에 저..

C Programming 2022.11.06

C언어 전역 변수, 지역 변수, 외부 변수 - 공부하는 도비

프로그래밍 수업을 할 때 학생들이 지역/전역 변수를 헷갈려해 아래와 같은 코드를 두고, 왜 오류가 나는지 묻는 경우가 있습니다.. 그래서 이 내용에 대해 정리를 좀 해두려고 합니다. 아마 main() 함수 안에 정의한 a, b를 당연히 sum() 함수에서 쓸 수 있다고 생각하는 거 같습니다. ㅜㅜ #include int sum(int p, int q) { return a + b + p + q; } int main() { int a = 10; int b = 20; int c = 100; int d = 200; printf("%d", sum(c, d)); return 0; } C언어의 변수에는 지역 변수, 전역 변수, 그리고 외부 변수로 크게 3가지로 나눌 수 있습니다. (정적, 레지스터 변수로도 나눌 수 ..

C Programming 2022.11.06