본문 바로가기
알고리즘 문제 풀이

[백준] 한 줄로 서기 - 복습

by pinok1o 2021. 3. 17.

https://www.acmicpc.net/problem/1138

가장 큰 사람부터 맨앞에 배치하고
그 다음으로 큰 사람부터 규칙에 맞게 맨앞부터 차례대로 밀어넣는다

자기보다 작은사람이 앞에 끼어들어와도 자신보다 큰 사람의 수에는 영향을 안주기 때문

#include <iostream>

using namespace std;

int N;

void insert(int *input, int index, int value)
{
    if (input[index] == 0) { //처음 입력되면 그냥 삽입
        input[index] = value;
    }
    else {//이전에 입력된 값이 있으면 뒤에값들을 한칸씩 밀어낸다
        for (int i = N-1; i > index; i--)
        {
            input[i] = input[i - 1];
        }
        input[index] = value;
    }
}

int main()
{

    cin >> N;

    int *input;
    input = (int*)malloc(sizeof(int)*N);
    int *result;
    result = (int*)malloc(sizeof(int)*N);
    for (int i = 0; i < N; i++)
        result[i] = 0; // 0 0 0 0

    for (int i = 0; i < N; i++)
    {
        cin >> input[i]; //2 1 1 0
    }

    for (int i = N; i > 0; i--) // 4 3 2 1
        insert(result, input[i-1], i);



    for (int i = 0; i < N; i++)
        cout << result[i] << " ";
    cout << endl;

}

댓글