[문제]
1138번: 한 줄로 서기 (acmicpc.net)
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
[문제 풀이]
문제를 이해하는데 많이 힘들었던 문제.
0으로 n만큼 차있는 벡터가 있을 때 각자의 숫자만큼 오른쪽으로 이동한 뒤에 해당 위치를 차지하는 내용이다.
예를들어 보기에서 나온 2 1 1 0 의 경우에는
이라는 칸을 1 / 2 / 3 / 4 번의 사람이 2 / 1 / 1 / 0 번 뛰어넘어서 들어가는 내용이다.
1번 사람의 경우 :
숫자 0을 2만큼 뛰어넘었으니 3번 자리에 1을 넣자.
2번 사람의 경우 :
숫자 0을 1만큼 뛰어넘었으니 2번쨰 자리에 2를 넣자.
3번 사람의 경우 :
숫자 0을 1만큼 뛰어넘으니 4번째 자리에 들어갔다.
4번 사람의 경우 :
숫자 0을 0번 뛰어넘으니 제일 첫번째 자리에 위치시키자.
이제 해당 내용을 코드로 작성해보도록 하자.
[코드]
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> people(n,0);
for(int i = 1;i<=n;i++){
int temp = 0;
cin>>temp;
for(int j = 0;j<n;j++){
if(temp == 0 && people[j] == 0){
people[j] = i;
break;
}
if(people[j] == 0 ){
temp--;
}
}
}
for(int i = 0;i<n;i++){
cout<<people[i]<<" ";
}
return 0;
}