백준

2605)줄 세우기

포도몽2 2019. 2. 11. 21:58

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


줄 세우는 방법이 특이하지만 어려운 문제는 아니다.


줄을 서는 사람은 숫자를 받게 되는데 그 수만큼 앞으로 가면 된다.


삽입 정렬을 약간 응용했다.


수를 입력받았을 때 입력받을 위치에서 그 수만큼 앞쪽에서 입력받아야 한다.


예를들어 순서대로 0 1 1 3 2를 받았다고 치자.


4번째 학생이 받은 번호는 3이기 때문에 4가 저장될 위치는 t에서 3칸 앞에 있다..


삽입 위치부터 한 칸씩 밀어내면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
 
int main() {
    int n;
    int *arr;
    int input;
    int j,t = 0;
 
    scanf("%d",&n);
    arr = (int *)calloc(n,sizeof(int));
 
    for (int cnt = 1; cnt <= n;cnt++) {
        scanf("%d",&input);
 
        j = t - 1;
 
        while (j >= t - input) {
            arr[j + 1= arr[j];
            j--;
        }
        arr[j + 1= cnt;
        t++;
    }
 
    for (int i = 0; i < n;i++) {
        printf("%d ",arr[i]);
    }
    printf("\n");
 
    return 0;
}
cs