Computer Science
-
[c언어] N의 약수가 주어질 때 N 값 구하는 프로그램Computer Science/알고리즘 2020. 8. 25. 23:19
문제: 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 구현하라. source: m2.c #include #include //malloc 함수가 선언된 헤더파일 int *divisor; //divisor 포인터 선언 int compare(const void *a, const void *b) { //비교하는 함수 return (*(int*)a - *(int*)b); } int main() { int N; scanf("%d", &N); //N을 입력받음 divisor = malloc(sizeof(int)*N); //int 크기 4바이트만큼 동적 메모리 할당 for (int i = 0; i < N; ..
-
[정렬 알고리즘] 숫자 애너그램 찾기Computer Science/알고리즘 2020. 8. 25. 09:02
문제: ‘애너그램’이란 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말합니다. 예를 들면 영어의 ‘tea’와 ‘eat’과 같이, 각 단어를 구성하는 알파벳의 구성은 같지만 뜻은 다른 두 단어를 말합니다. 우리말에는 ‘문전박대’와 ‘대박전문’과 같은 예를 들 수 있습니다. 우리는 문자 대신 숫자를 이용해서 애너그램을 찾는 프로그램을 만들어봅시다. 5자리의 숫자 1쌍이 입력으로 주어지며 애너그램일 경우에는 “True”를 아닐 경우에는 “False”를 출력하도록 합시다. 숫자를 입력받는 부분은 따로 구현하지 않고 프로그램 내부에 배열로 선언하는 것으로 가정하고, 숫자에는 중복이 있을 수 있습니다. 예) 입력값: 12345, 54321 -> 출력값: True 입력값: 14258, 25431 -> 출력값..
-
포인터를 사용하여 2차원 배열 데이터 접근하기Computer Science/알고리즘 2020. 8. 25. 08:56
https://sandbox.cs50.io/87d1e71b-ae34-4473-a25c-6b9fd64aa68e CS50 Sandbox Temporary programming environments for students and teachers. sandbox.cs50.io 2차원배열의 행과 열의 크기를 각각 구하는 부분을 아래와 같이 선언하였다. int row = sizeof(arr) / sizeof(arr[0]); //행 int col = sizeof(arr[0]) / sizeof(arr[0][0]); //열
-
알고리즘의 시간 복잡도 총 정리Computer Science/알고리즘 2020. 8. 16. 21:53
무거운 프로그램일 수록 처리하는 데이터가 많아지고 처리하는 작업이 복잡해질수록 시간은 매우 중요해집니다. 그래서 개발자들은 상황에 따라 특정 알고리즘을 유연하게 사용할 수 있어야 합니다. 특정 알고리즘의 실행시간을 표기하는 용어는 아래와 같습니다. Big O 표기법에서 O 는 "on the order of"의 약자로 "~만큼의 정도로 커지는" 것이라고 해석됩니다. O(n)은 n만큼 커지는 것이므로 n이 늘어날수록 선형적으로 증가하게 됩니다. O(n/2)는 n이 무한대로 커지면 1/2는 결국 의미가 없어지므로 O(n)과 같은 의미로 볼 수 있습니다. Big Ω표기법은 반대로 알고리즘 실행시간의 하한을 나타낸 것입니다. 예를 들어 선형 검색은 n개의 항목이 있을 때 앞에서부터 차례로 하나씩 검색하므로 총 n..