본문 바로가기
C/C 알고리즘 입문 (이젠 강의 내용)

2 초급 알고리즘 (sum, sequence, count, avg, max, min)

by yororing 2024. 6. 18.

00 개요

  • 목표: Visual Studio라는 IDE를 사용하여 C 알고리즘 구현하기

01 Visual Studio 사용하여 프로그램 만들기

1. 솔루션 탐색기 보기

  • '보기' > '솔루션 탐색기' 클릭

2. 새 프로젝트 만들기

  • Visual Studio 연 후 '새 프로젝트 만들기' 클릭 또는 '파일' > '새로 만들기' > '프로젝트' > '빈 프로젝트'
    • 프로젝트 이름: 원하는 거로 지정
    • 위치: 원하는 위치 지정
    • 솔루션: 새 솔루션 만들기
    • 솔루션 이름: 원하는 거로 지정
    • > '만들기'

 

3. c 파일 또는 c++ (소스 파일) 생성

  • Visual Studio 연 후 어느 프로젝트 안에서 시작
  • 솔루션 탐색기에 어느 '프로젝트명' > '소스파일' 우클릭 > '추가' >  '새 항목' > 'C ++ 파일' 한 번 클릭 > '파일명.c' 또는 '파일명.cpp' > '추가'
    • 파일명 확장자를 .c로 줄 경우 C 언어 파일, .cpp로 줄 경우 C++ 언어 파일이 생성됨

4. 간단한 출력 프로그램 생성

  • 해당 .c 또는 .cpp 파일에 코드 작성

1) C 언어

  • 가장 기본적인 C 언어 출력 프로그램:
#include <stdio.h>

main()
{
    printf("안녕하세요. C언어");
}
  • C 언어의 다른 표현:
#include <stdio.h>

int main(void)
{
	printf("Hello C언어");
	return 0;
}

2) C ++ 언어

  • 가장 기본적인 C 언어 출력 프로그램:
#include <iostream>

int main()
{
    std::cout << "Hello C++\n";
    return 0;
}
  • C 언어의 다른 표현:
#include <iostream>

using namespace std;

int main()
{
	cout << "Hello C++" << endl;
	return 0;
}

5. 코드 파일 실행하기

1) 디버그하지 않고 실행

  • '디버그' > '디버그하지 않고 시작' 클릭
    • 해당 .c 파일이 컴파일돼서 콘솔에서 실행이 

 

2) 디버거 기능 사용하여 단계별로 실행

  • 중단점 설정/해제하기
    • 해당 줄 선택 후
    • 방법1: F9 누르기 
    • 방법2: 왼쪽에 채워진 동그라미 클릭하면 빨간색 동그라미고 변환됨 → 중단점 설정 됐다는 표시
    • 방법3: '디버그' > '중단점 설정/해제하기' 클릭

 

  • 디버깅 시작하기
    • '디버그' > '디버깅 시작'

  • 디버거 창이 뜬 것 확인 → 하단에 '자동', '로컬', '조사식 1'이 뜬 것 확인
  • 단계별 / 프로시저 단위별로 실행하기
    •  '디버그' > '한 단계씩 코드 실행' (F11) 또는 '프로시저 단위 실행' (F10)

  • 조사식 추가하여 값 확인하기
    • 하단에 '조사식 1' > '감시할 항목 추가' 더블 클릭 > 확인하고 싶은 식 copy & paste 하기

  • 파일 안에서 해당 식 위에 커서를 올려놨을 때 값 확인 가능

 

03 초급 알고리즘

1. Sum 합계 

//[?] n명의 국어 점수 중에서 80점 이상인 점수의 합계
#include <stdio.h>

// 합계 알고리즘 (Sum Algorithm): 주어진 범위에 주어진 조건에 해당하는 자료들의 합계
main()
{
	//[0] Initialize
	int sum = 0; // 합계

	//[1] Input: 입력: n명의 국어 점수
	int scores[6] = { 100, 75, 50, 37, 90, 95 };
	int N = sizeof(scores) / sizeof(int); // 의사코드(슈도코드)

	//[2] Process: 처리: 합계 알고리즘 영역: 주어진 범위에 주어진 조건 (필터링)
	for (int i = 0; i < N; i++)
	{
		if (scores[i] >= 80)
		{
			sum += scores[i]; // SUM
		}
	}
	//[3] Output: 출력
	printf("%d명의 점수 중 80점 이상의 총점: %d\n", N, sum);
}

2. Arithmetic Sequence 등차수열 알고리즘 

//[?] 1부터 20까지의 정수 중 홀수의 합을 구하는 프로그램
// 1, 3, 5, 7, 9 ...
#include <stdio.h>

// 등차수열(Arithmetic Sequence): 연속하는 두 수의 차이가 일정한 수열
main()
{
	//[1] Input
	int sum = 0; // SUM

	//[2] Process
	for (int i = 1; i <= 20; i++) // 주어진 범위
	{
		if (i % 2 != 0) // 주어진 조건: 필터링(홀수)
		{
			sum += i; // SUM
			printf("%d", i); // SEQUENCE
		}
	}
	//[3] Output
	printf("\n1부터 20까지의 홀수의 합: %d\n", sum); // 100
}

 

3. Count 개수 알고리즘 

//[?] 1부터 1,000까지의 정수 중 13의 배수의 개수(건수/횟수) 구하기
#include <stdio.h>

/*
개수 알고리즘 (Count Algorithm):  주어진 범위에 주어진 조건에 해당하는 자료들의 개수
*/
main()
{
	//[1] Input: 1부터 1,000까지의 데이터
	int count = 0; // 개수를 저장할 변수는 0으로 초기화

	//[2] Process: 개수 알고리즘 영역: 주어진 범위에 주어진 조건(필터링)
	for (int i = 1; i <= 1000; i++)
	{
		if (i % 13 == 0)
		{
			//count = count + 1;
			//count += 1;
			count++;
		}
	}
	
	//[3] Output
	printf("1부터 1,000까지의 정수 중 13의 배수의 개수: %d\n", count);
}

 

4. Average 평균 알고리즘 

//[?]n명의 점수 중 80점 이상 95점 이하인 점수의 평균 구하기
#include <stdio.h>

// 평균 알고리즘 (Average Algorithm): 주어진 범위에 주어진 조건에 해당하는 자료들의 평균
main()
{
	//[1] Input: n명의 성적
	int data[5] = { 90, 65, 78, 50, 95 };
	int sum = 0; // 합계 담는 그릇
	int count = 0; // 개수 담는 그릇
	int N = sizeof(data) / sizeof(int); // 의사코드(슈도코드)

	//[2] Process: AVG = SUM / COUNT
	for (int i = 0; i < N; i++) // 주어진 범위
	{
		if (data[i] >= 80 && data[i] <= 95) // 주어진 조건
		{
			sum += data[i]; // SUM
			count++; // COUNT
		}
	}
	
	double avg = sum / (double)count; // AVG

	//[3] Output
	printf("80점 이상 95점 이하인 자료의 평균: %.2f\n", avg);
}

5. Maximum 최댓값 알고리즘

//[?] 주어진 데이터 중 가장 큰 값 구하기
#include <stdio.h>
#include <limits.h>  // INT_MIN을 참조하기 위함

// 최댓값 알고리즘 (Max Algorithm): 주어진 범위 + 주어진 조건 자료들의 가장 큰 값
main()
{
	//[0] Initialize
	int max = INT_MIN; // 정수 형식의 데이터 중 가장 작은 값으로 초기화 -> -2147483648

	//[1] Input
	int numbers[5] = { -2, -5, -3, -7, -1 }; // Max: -1
	int N = sizeof(numbers) / sizeof(int); // 슈도코드/의사코드

	//[2] Process: MAX
	for (int i = 0; i < N; i++)
	{
		if (numbers[i] > max) // 더 큰 데이터가 있다면
		{
			max = numbers[i]; // MAX: 더 큰 값으로 할당
		}
	}
	
	//[3] Output
	printf("최댓값: %d\n", max);
}

 

6. minimum 최솟값 알고리즘

//[?] 주어진 데이터 중에서 가장 작은 짝수 값
#include <stdio.h> // printf()를 가져옴
#include <limits.h> // INT_MAX를 가져옴

// 최솟값 알고리즘 (min Algorithm): 주어진 범위 + 주어진 조건의 자료들의 가장 작은 값
main()
{
    //[0] Initialize
    int min = INT_MAX; // 정수 형식의 데이터 중 가장 큰 값으로 초기화

    //[1] Input
    int numbers[5] = { 2, 5, 3, 7, 1 }; // MIN: 1 -> MIN: 2 (짝수)
    int N = sizeof(numbers) / sizeof(int);

    //[2] Process: MIN
    for (int i = 0; i < N; i++)
    {
        if (numbers[i] < min && numbers[i] % 2 == 0)
        {
            min = numbers[i];
        }
    }

    //[3] Output
    printf("짝수 최솟값: %d\n", min);
}

 

 

참조

  1. ezen 온라인 강의: 쉽게 배우는 C 알고리즘 입문(박용)
  2.  
  3.