자연수 A, B가 주어지면 A부터 B까지의 합을 수식과 함께 출력하세요. 입력 첫 줄에 자연수 A, B가 공백을 사이에 두고 차례대로 입력된다. 출력 첫 줄에 더하는 수식과 함께 합을 출력한다. 예제 3 7 3+4+5+6+7=25 int main(){ int a, b; int sum = 0; cin >> a >> b; for(int i = a; i < b; ++i){ cout
분류 전체보기
문제 자연수 N이 입력되면 1부터 N까지의 수 중 M의 배수합을 출력하는 프로그램 입력 첫 줄에 자연수 N과 M이 차례대로 입력됨 출력 첫 줄에 M의 배수합을 출력함 예제 15 3 45 #include using namespace std; int main(){ int n, m; int sum = 0; cin >> n >> m; for(int i =1; i
\t%2d\t : 탭을 나타낸다. 탭으로 구분하여 정렬하는 것
선형 검색 임의의 배열에서 원하는 데이터를 찾는 알고리즘 '임의의'인 이유는 크기 순서대로 정렬된 배열이라면 '이진 검색'을 사용하는 것이 낫다. 순서 무작위. 배열의 앞에서부터 데이터를 확인한다. 계산 시간은 O(n) 예) 지정한 값과 배열의 값이 같을 경우 종료. 배열에 같은 값이 중복으로 있을 경우에도, 처음 발견된 시점에 종료한다. x=68인 경우, '1' 원하는 값이 발견되지 않은 경우 '-1'을 표시한다. -1은 인덱스로 사용할 수 없는 값이기 때문 #include #define LENGTH 10 int main(void) { int x = 0; int pos = -1; int a[] = { 72, 68, 92, 88, 41, 53, 97, 84, 39, 55 }; printf("입력할 숫자 ..
n+1개의 탑을 이동하려 할 때, 가장 큰 원반을 무시하고, n개를 b로 이동 시킨다. 가장 큰 원반을 c로 이동시킨 뒤 이동시키면 된다. 처음에 b로 n개의 탑을 이동시킬 때, c와 나누어서 이동시켜야 하기 때문에 계산적으로 해야한다. n개 탑 문제는 n-1 탑 문제를 활용하면 되고, n-1은 n-2를 활용하면 되기 때문에 재귀적 알고리즘이다. 계산 시간 n-1개를 A에서 B로 이동시킬 때, n-1 가장 큰 원반을 C로 이동시킬 때, 1 B에 있는 n-1개를 C로 이동시킬 때, n-1이 필요하므로 T(n) = 2T(n-1) + 1 = 2^n - 1
🌟 소수는 1과 자신 이외는 약수로 가지지 않는 1보다 큰 자연수이다. 🟩 페르마 테스트 = 확률적 소수 판별법 어떤 수가 '소수일 가능성이 높은지'를 판별하는 것 1. 해당 수보다 작은 수를 해당 수만큼 제곱한다. 예)5 -> 1^5 ~ 4^5 2. 각각의 숫자를 mod 연산을 이용해 해당 수로 나눈다. 예) 1^5 = 1 mod 5 = 1 3. 원래 수와 나머지 값이 모두 일치하면, 소수이다. 페르마의 소정리를 만족하는지를 소수 판별을 하는 방법이 '페르마 테스트' 일치하는지 확인하는 횟수를 늘릴수록 소수일 확실성이 높아진다. 단 p보다 작은 모든 수를 확인하려면 매우 오랜 시간이 걸린다. 실제로는 몇 개의 수만 확인해서 소수일 가능성이 매우 높다고 판단할 수 있으면 '아마도 소수'라고 판정하고 있다..
알고리즘 효율성 분석 1. 공간 복잡도 메모리의 양 = 정적 공간 + 동적 공간 2. 시간 복잡도 수행시간 = 알고리즘의 실행에서부터 완료까지 걸리는 시간 = 각 문장(연산)이 수행되는 횟수 👉 입력 크기 (데이터의 갯수) 예) 리스트의 원소 개수, 행렬 크기, 그래프 정점의 수 👉 입력 데이터의 상태 점근성능 : 데이터의 값 n이 무한히 커짐에 따라 결정되는 성능 시간복잡도 구하기 알고리즘의 모든 문장이 아닌 루프의 반복 횟수만을 조사하여 최고 차수를 시간 복잡도로 취함
'수'에 대한 '문제를 푸는 방법' 컴퓨어 분야에서는 '공식화된', '단계적'이라는 조건 애매모호하며 언제 끝날지 모르는 절차는 알고리즘으로 부를 수 없다. 유클리드 호제법 두 정수의 최대공약수를 구하는 알고리즘 1. 두 정수의 큰 쪽 - 작은 쪽, 양쪽이 같아질 때까지 반복한다. 2. 같아진 값이 최대공약수가 된다. 예) 50과 30의 최대공약수 = 10 30 30 30-20=10 10 50 50-30=20 20 20-10=10 cf. 나머지로 최대공약수 구하기 더보기 큰 쪽에서 작은 쪽은 나눈 나머지를 계속 구한다. 나머지 값이 0이 되는 몫을 최대공약수라 한다. 예) 50과 15의 최대공약수 = 5 1. 15 50 % 15 = 5 (50 -> 5) 2. 5 15 % 5 ..
파일을 읽고 쓸 때는 fputs(), fgets() 함수와 fprintf(), fscanf() 함수를 사용. 한 쌍으로 이루어짐 파일에서 데이터를 읽고 쓸 때는 먼저 fopen() 함수로 파일을 열어서 파일 포인터를 얻어야 한다. 파일 포인터는 fopen() 함수를 통해 무슨 파일을 열었는지, 파일을 어디까지 읽었는지, 파일의 끝에 도달했는지 등의 정보를 담는다. 파일 포인터를 얻는 방법 FILE * 포인터명 = fopen(파일명, 파일모드); 파일 모드 : r 읽기 전용, w 쓰기 전용, a 이어 쓰기 읽기, 쓰기 전용 뒤에는 t와 b를 붙일 수 있는데, t는 텍스트를 의미, b는 바이너리 데이터를 의미 텍스트 = 사람이 읽을 수 있는 문자열, 바이너리 데이터 = 컴퓨터가 읽을 수 있는 0과 1로 된 ..
struct 구조체명 { 자료형1 변수명1; 자료형2 변수명2; 자료형3 변수명3; ... }; 구조체는 보통 전역함수와 마찬가지로 main() 함수 위 전역 위치에 정의한다. 사용자 정의 자료형 struct GameInfo { char* name; int year; int price; char* company; }; 구조체 선언 : struct 구조체명 변수명; struct GameInfo gameInfo1; typedef로 구조체 선언하기 더보기 typedef : 자료형에 새로 이름을 붙일 때 사용 int i = 1; typedef int 정수; // int == 정수 정수 정수변수 = 3; // int i = 3; typedef float 실수; 실수 실수변수 = 3.23f; // float f =..
int arr[2][5]; = 자료형 배열명[세로크기][가로크기]; 5개의 연속된 메모리 공간을 가진 1차원 배열이 2개 있다. 총 요소는 5 x 2 =10개 2차원 배열은 1차원 배열을 의미하는 대괄호에 대괄호가 하나 더 추가된다. 2차원 배열이 2개 이상 연속되면, 3차원 배열 int arr[3][3][3]; 3개의 연속된 공간을 가진 1차원 배열이 3개 있고, 이런 2차원 배열이 다시 3개 있다는 뜻 즉, 3 x 3크기의 2차원 배열이 3개 있으며, 총 요소는 3 x 3 x 3 = 27개이다. 세로 크기는 생략 가능 int arr[][2]; 같은 모양의 카드 맞추기 게임 더보기 #include #include #include int arrayAnimal[4][5]; char* strAnimal[10..
https://blog.naver.com/PostView.naver?blogId=yj35__&logNo=223070766371 Visual Studio 2022 GitHub 업로드프로젝트 practice로 생성하고 (hello world 국룰) cpp코드로 작성해주었다. Git 리포지토리 만들기 클릭...blog.naver.com 1. 코드 입력2. 상단 메뉴 'git' - 'git 리포지토리 만들기' 클릭 - 연동