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 |
'백준' 카테고리의 다른 글
2607)비슷한 단어 (0) | 2019.02.12 |
---|---|
2606)바이러스 (0) | 2019.02.12 |
2309)일곱난쟁이 (0) | 2019.02.11 |
2217)로프 (0) | 2019.02.11 |
2290)LCD Test (0) | 2019.02.10 |