
#include <iostream>
#include <cmath>
using namespace std;
// 배열의 합을 구하는 함수
int Sum(const int num[], int size)
{
int result = 0;
for (int i = 0; i < size; i++)
{
result += num[i];
}
return result;
}
// 평균을 구하는 함수
double Avg(const int num[], int size)
{
if (size == 0)
{
cout << "0으로 나눌 수 없습니다." << endl;
return -1; // 오류 코드 반환
}
double total_num = Sum(num, size);
return total_num / size;
}
int main()
{
const int kSize = 5;
int num[kSize]; // 5개의 숫자를 입력받을 배열
cout << "5개의 숫자를 입력하시오. " << endl;
for (int i = 0; i < kSize; i++)
{
cin >> num[i];
}
int total_num = Sum(num, kSize); // 총합 계산
double result = Avg(num, kSize); // 평균 계산
if (result != -1) // 평균이 정상적으로 계산되었을 경우에만 출력
{
cout.precision(4); // 소수점 4자리까지 출력
cout << fixed; // 소수점 고정
cout << "평균 : " << result << endl;
}
return 0;
}
double a = 1111.123456789;
std::cout.precision(6);
std::cout << a << std::endl;
//출력 : 1111.12
std::cout.precision(8);
std::cout << a << std::endl;
//출력 : 1111.1235
double a = 1111.123456789;
std::cout.precision(8);
std::cout << std::fixed;
std::cout << a << std::endl;
//출력 : 1111.12345679

#include <iostream>
using namespace std;
// 내림차순 정렬 함수
void DescendingSort(int num[], int size)
{
// 배열을 정렬하기 위한 두 개의 중첩된 for문
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
// 현재 num[i]가 num[j]보다 작으면 두 값을 교환
if (num[i] < num[j])
{
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}
// 오름차순 정렬 함수
void AscendingSort(int num[], int size)
{
// 배열을 정렬하기 위한 두 개의 중첩된 for문
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
// 현재 num[i]가 num[j]보다 크면 두 값을 교환
if (num[i] > num[j])
{
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}
int main()
{
const int kSize = 5; // 배열의 크기 설정
int num[kSize]; // 정수 배열 선언
int type; // 정렬 방식 선택을 위한 변수
// 사용자에게 숫자 5개를 입력받도록 요청
cout << "5개의 숫자를 입력하시오." << endl;
// 사용자로부터 숫자 5개 입력받기
for (int i = 0; i < kSize; i++)
{
cin >> num[i];
}
// 사용자에게 정렬 방식을 선택하도록 요청
cout << "정렬 방식을 선택하시오. 1-오름차순 / 2-내림차순" << endl;
cin >> type; // 정렬 방식 입력받기
// 선택된 정렬 방식에 따라 분기
switch (type)
{
case 1:
// 오름차순 정렬
AscendingSort(num, kSize);
break;
case 2:
// 내림차순 정렬
DescendingSort(num, kSize);
break;
default:
// 잘못된 번호 입력 시 메시지 출력
cout << "잘못된 번호입니다." << endl;
cout << "1-오름차순 / 2-내림차순" << endl;
break;
}
// 정렬된 배열을 출력
for (int i = 0; i < kSize; i++)
{
cout << num[i] << " ";
}
return 0; // 프로그램 종료
}
i번째 값을 i-1 ~ 0번째 값들과 비교하여 정렬이 맞지 않으면 두 수를 스왑해주는 방식을 사용했음



💡 선택 정렬과 삽입 정렬
- 선택 정렬과 삽입 정렬은 k번째 반복 이후, 첫 번째 k요소가 정렬된 순서로 나온다는 점에서 유사함
- But 선택 정렬은 k+1번째 요소를 찾기 위해 나머지 모든 요소들을 탐색, 삽입 정렬은 k+1번째 요소를 배치하는 데 필요한 만큼의 요소만 탐색하기 때문에 훨씬 효율적으로 실행됨


💡 퀵 정렬과 병합 정렬
- 퀵 정렬 : 우선 피벗을 통해 정렬 → 영역을 쪼갬
- 병합 정렬 : 영역을 쪼갤 수 있을 만큼 쪼갬 → 정렬


💡 힙 (Heap)
- 완전 이진 트리이기 때문에 적절히 중간 레벨의 노드를 추출하면 중앙값에 가까운 값을 근사치로 바르게 추출할 수 있음
- 균형을 유지하려는 특징 때문에 우선순위 큐, 다익스트라, 힙 정렬, 프림 알고리즘에 활용됨