전체 글 183

문자열 비교 (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

C언어 피보나치 수열 출력하기 - 공부하는 도비

2022.10.28 - [C언어] - [C언어] 재귀 함수를 사용한 피보나치 수열 - 공부하는 도비 [C언어] 재귀 함수를 사용한 피보나치 수열 - 공부하는 도비 https://ko.wikipedia.org/wiki/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98_%EC%88%98 피보나치 수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 피보나치 수를 이용한 사각형 채우기 수학에서.. yang-wistory1009.tistory.com 저번 피드에서 재귀 함수를 이용하여, 입력한 수에 대한 피보나치 수를 계산해보았습니다. 오늘은 재귀함수 대신, 배열을 사용한 피보나치 수열 계산에 대해 알아보려고 합니다. 입력받은 수의 길이 만큼 새로운 배열을 만들고, 그 배열 ..

C Programming 2022.10.31

C언어 재귀 함수를 사용한 피보나치 수열 - 공부하는 도비

https://ko.wikipedia.org/wiki/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98_%EC%88%98 피보나치 수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 피보나치 수를 이용한 사각형 채우기 수학에서 피보나치 수(영어: Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. ko.wikipedia.org 오늘은 임의의 양의 정수 n을 입력하면 n번째 피보나치수열의 값을 출력하는 프로그램을 재귀 함수를 사용하여 구해보도록 하겠습니다. #include int fibo(int num) { if (num

C Programming 2022.10.28

버블 정렬 (오름차순 정렬) - 공부하는 도비

파이썬엔 sort라는 좋은 함수가 있어, 굳이 정렬 함수를 작성하진 않아도 된다. 하지만, 정리해두면 누군가에겐 도움이 되지 않을까해서 글을 쓰고 있다. 우선 sort 함수를 쓰면 정말 간단하게 배열을 정렬할 수 있다. 자세한 내용은 아래 링크를 활용하면 좋을 듯 합니다. 2020.12.23 - [파이썬/파이썬 이론] - [파이썬] 정렬하기 list.sort(), sorted(), 키 함수 사용 - 공부하는 도비 [파이썬] 정렬하기 list.sort(), sorted(), 키 함수 사용 - 공부하는 도비 오늘은 파이썬 정렬함수에 대해 알아보겠습니다.! 파이썬에서 정렬가능 함수는 list.sort()함수와 sorted()함수 두가지 있습니다. * list.sort() 와 sorted() 함수 차이 list..

Python/Python Basic 2022.10.28