[C++] 버블 정렬 코드 분석

유빈·2024년 3월 9일
0

C++

목록 보기
6/12
post-thumbnail

1. 문제

📌권오흠 교수님 객지프 code24

사용자로부터 n개의 정수를 입력받은 후 중복된 정수들을 제거하고 남은 정수들만 출력한다.

입력
-2 3 12 -1 12 13 12 13 3 5 -1 0 4

출력
-2 -1 0 3 4 5 12 13



2. 내 코드 1

#include <iostream>

using namespace std;
const int MAX = 100;

int main() {
    int n, temp;
    int data[MAX] = {};
    int ans[MAX] = {};

    cin >> n;

    for (int i = 0; i < n; i++) 
        cin >> data[i];

    for (int i = n-1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (data[j] > data[j+1]) 
                int temp = data[j];
                data[j] = data[j+1];
                data[j+1] = temp;
        }
    }

    int idx = -1;
    for (int j = 0; j < n-1; j++) {
        if (j < n-2 && data[j] != data[j+1]) 
            ans[++idx] = data[j];
        else if (j == n-2 && data[j] != data[j+1]) {
            ans[++idx] = data[j];
            ans[++idx] = data[j+1];
        }
    }   

    cout << idx;   // 0

    for (int k = 0; k <= idx; k++)
        cout << data[k] << " ";    // 4

    return 0;
}

3. 내 코드 2

#include <iostream>

using namespace std;
const int MAX = 100;

int main() {
    int n, temp;
    int data[MAX] = {};
    int ans[MAX] = {};

    cin >> n;

    for (int i = 0; i < n; i++) 
        cin >> data[i];

    for (int i = n-1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (data[j] > data[j+1]) 
                int temp = data[j];
                data[j] = data[j+1];
                data[j+1] = temp;
        }
    }

    int idx = 0;
    ans[idx] = data[0];
    for (int j = 1; j < n; j++) {
        if (data[j] != data[j-1]) {
            idx++;
            ans[idx] = data[j];
            // ans[++idx] = data[j];
        }
    }
    cout << idx;  

    for (int k = 0; k <= idx; k++)
        cout << ans[k] << " ";

    for (int i = 0; i < n; i++)
        cout << data[i] << " ";

    return 0;
}


4. 교수님 코드

#include <iostream>

using namespace std;
const int MAX = 100;

int main() {
    int n;
    int data[MAX];

    cin >> n;

    for (int i = 0; i < n; i++) 
        cin >> data[i];
    
    for (int i = n-1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (data[j] > data[j+1]) {
                int tmp  = data[j];
                data[j] = data[j+1];
                data[j+1] = tmp;
            }
        }
    }
    
    int k = 0;
    for (int i = 1; i < n; i++) {
        if (data[i] != data[i-1]) 
            data[++k] = data[i];
    }
    for (int i = 0; i <= k; i++) 
        cout << data[i] << " ";
    cout << endl;
        
    return 0;
}


어느부분에서 목표 출력값과 다르게 나오는지 다시 살펴보고 써야겠다.

profile
🌱

0개의 댓글