https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
과정
- 만약 앞에 최소 2명의 큰 사람이 있다면 인덱스를 0부터 시작할 필요가 없다.
- 큰 사람의 수에서 인덱스를 시작하자
- 하나씩 넣어가며 dfs를 돌리고 조건을 만족하면 종료하자
코드
#include<iostream>
using namespace std;
int N;
int jul[11];
int arr[11];
void input(){
cin>>N;
for(int i=0;i<N;++i){
cin>>arr[i];
}
}
bool dfs(int now){
if(now == N){
for(int i=0;i<N;++i){
int cnt = 0;
int node = i+1;
for(int j=0;jul[j]!=node;++j)
if(jul[j] > node)
++cnt;
if(cnt != arr[node-1])
return false;
}
return true;
}
for(int i=arr[now];i<N;++i){
if(jul[i]==0){
jul[i] = now+1;
if(dfs(now+1))
return true;
jul[i] = 0;
}
}
return false;
}
void solution(){
dfs(0);
for(int i=0;i<N;++i)
cout<<jul[i]<<" ";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solution();
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| 2075 - N번째 큰 수 (0) | 2023.07.21 |
|---|---|
| 14658 - 하늘에서 별똥별이 빗발친다 (0) | 2023.07.20 |
| 24042 - 횡단보도 (0) | 2023.07.19 |
| 1522 - 문자열 교환 (0) | 2023.07.18 |
| 1911 - 흙길 보수하기 (0) | 2023.07.18 |
댓글