문제 링크
풀이
answer
벡터를0
으로 초기화한다.- 작은 키부터 자리를 찾아가는데, 이렇게 하게 되면
answer
의0
은 자기보다 큰 키가 될 것이다.(자기 이후에 찾게 될테니)answer
를 돌면서 자기보다 큰 키면(answer[j] == 0
)zeroCnt
를 하나 더해준다.- 그렇게
zeroCnt
가arr[i]
와 같아지게 되면 해당 자리의 다음 자리에 넣어주면 된다. - 그 자리가 비어있지 않다면(
0
이 아니라면) 빈 자리를 찾아 넣어준다.
answer
를 출력한다.
코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
vector<int> answer(n, 0);
for (int i = 0; i < n; i++) // 작은 키부터 시작
{
int zeroCnt = 0;
int j;
for (j = 0; zeroCnt < arr[i]; j++) // 자기보다 큰 키(0) 수 세기
{
if (answer[j] == 0) zeroCnt++;
}
while (answer[j] != 0) // 해당 자리가 비어있지 않으면 다음 자리로
{
j++;
}
answer[j] = i + 1;
}
for (int i = 0; i < n; i++)
{
cout << answer[i] << ' ';
}
}