전체 코드

🔹 1. 전체 코드 구조

기능설명
Swap()두 개의 값을 교환하는 함수
Sort()배열을 오름차순 정렬하는 함수
ChooseLotto()랜덤한 6개의 로또 번호를 생성하는 함수
CheckDuplication()중복 여부를 검사하는 함수
main()프로그램 실행 및 결과 출력

🔹 2. Swap 함수 (두 변수의 값 교환)

void Swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

기능: 두 변수 ab의 값을 교환
매개변수 전달 방식:

  • 참조 전달 (int& a, int& b)
  • 변수를 직접 참조하므로 값을 변경할 수 있음

📌 예제 실행

int a = 1, b = 2;
Swap(a, b);
cout << a << " " << b << endl;  // 출력: 2 1

Swap(a, b) 호출 후 ab의 값이 바뀜


🔹 3. Sort 함수 (선택 정렬)

void Sort(int numbers[], int count) {
    for (int i = 0; i < count; i++) {
        int best = i;
        for (int j = i + 1; j < count; j++) {
            if (numbers[j] < numbers[best]) {
                best = j;
            }
        }
        if (i != best) {
            Swap(numbers[i], numbers[best]);
        }
    }
}

기능: 배열을 오름차순 정렬
정렬 알고리즘: 선택 정렬 (Selection Sort)
동작 방식:
1. i번째 원소를 기준으로 잡고 가장 작은 값을 찾음
2. 찾은 값과 i번째 값을 교환
3. 이 과정을 배열 크기만큼 반복하여 정렬 완료

📌 예제 실행

int numbers[6] = {1, 42, 3, 15, 5, 6};
Sort(numbers, 6);
for (int i : numbers) cout << i << " ";  
// 출력: 1 3 5 6 15 42

➡ 선택 정렬을 통해 오름차순 정렬 완료


🔹 4. CheckDuplication 함수 (중복 검사)

bool CheckDuplication(int numbers[]) {
    bool ret = false;
    for (int i = 0; i < 5; i++) {
        for (int j = i + 1; j < 6; j++) {
            if (numbers[i] == numbers[j]) {
                numbers[j] = 0;  // 중복된 값은 0으로 변경
                ret = true;
            }
        }
    }
    return ret;
}

기능: 배열에서 중복된 값이 있는지 검사
동작 방식:
1. 이중 반복문을 사용하여 배열 내의 값 비교
2. 중복 값이 있으면 0으로 변경
3. 중복이 발생했음을 나타내는 true 반환

📌 예제 실행

int numbers[6] = {3, 12, 25, 3, 40, 41};
bool result = CheckDuplication(numbers);
cout << result << endl;  // 출력: 1 (중복 있음)

➡ 배열에 중복 값 3이 있어서 true 반환


🔹 5. ChooseLotto 함수 (로또 번호 생성)

void ChooseLotto(int numbers[]) {
    srand((unsigned)time(0));  // 난수 생성 시드 설정
    bool hasDuplication = false;

    for (int i = 0; i < 6; i++) {
        numbers[i] = (rand() % 45) + 1;  // 1~45 사이 난수 생성
    }

    hasDuplication = CheckDuplication(numbers);

    // 중복이 없을 때까지 반복하여 새로운 난수 생성
    while (hasDuplication) {
        for (int i = 0; i < 6; i++) {
            if (numbers[i] == 0) numbers[i] = (rand() % 45) + 1;
        }
        hasDuplication = CheckDuplication(numbers);
    }

    Sort(numbers, 6);  // 정렬 수행
}

기능: 1~45 사이의 랜덤한 숫자 6개를 생성
중복 검사:
1. rand() % 45 + 1을 사용하여 1~45 사이의 난수 생성
2. CheckDuplication() 함수를 사용하여 중복 확인
3. 중복이 있다면 새로운 난수를 다시 생성
4. 모든 값이 고유할 때까지 반복

📌 예제 실행

int numbers[6] = {0, 0, 0, 0, 0, 0};
ChooseLotto(numbers);
for (int i : numbers) cout << i << " ";

랜덤한 6개의 숫자가 출력됨 (중복 없음)
숫자는 자동으로 정렬됨


🔹 6. main() 함수 (프로그램 실행)

int main() {
    // 1. Swap 함수 테스트
    int a = 1, b = 2;
    Swap(a, b);
    cout << a << " " << b << endl;  // 출력: 2 1

    // 2. 정렬 함수 테스트
    int numbers[6] = {1, 42, 3, 15, 5, 6};
    Sort(numbers, sizeof(numbers) / sizeof(int));  
    for (int i : numbers) cout << i << " ";  
    cout << endl;

    // 3. 로또 번호 생성
    int numbers2[6] = {0, 0, 0, 0, 0, 0};
    ChooseLotto(numbers2);
    for (int i : numbers2) cout << i << " ";

    return 0;
}

프로그램 실행 순서:
1. Swap(a, b) 실행 후 ab의 값 출력
2. Sort(numbers, 6) 실행 후 정렬된 배열 출력
3. ChooseLotto(numbers2) 실행 후 랜덤한 로또 번호 출력

📌 출력 예시

2 1
1 3 5 6 15 42
5 11 22 28 30 42  (실행할 때마다 값이 바뀜)

정렬된 숫자 & 랜덤한 로또 번호 출력


profile
李家네_공부방

0개의 댓글