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;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준]단어 정렬 - 복습 (0) | 2021.03.22 |
---|---|
[백준]RGB거리 - 복습 DP (0) | 2021.03.17 |
[백준] 트리 - 복습 (0) | 2021.02.05 |
[백준] 친구 - 복습(플루이드-와샬) (0) | 2021.02.05 |
[백준] 명령 프롬프트 - 복습(c++ String) (0) | 2021.02.04 |
댓글