https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
[난이도] Silver2
[유형] 브루트포스
[풀이]
N 제한이 10밖에 되지 않기 때문에 v[N] 배열에 1부터 N까지 순서대로 저장 한 뒤
순열을 이용해 정답이 될 수 있는 모든 경우의 수를 만들어 보며 조건을 만족하지는지 체크해주면 됩니다.
#include <cstdio> #include <algorithm> using namespace std; int N,a[11],v[11]; bool check(){ for(int i=1;i<=N;i++){ int cnt=0; for(int j=1;j<i;j++){ if(v[j]>v[i]) cnt++; } if(a[v[i]] != cnt) return 0; } return 1; } int main(){ scanf("%d",&N); for(int i=1;i<=N;i++) { scanf("%d",&a[i]); v[i]=i; } do{ }while(!check() &&next_permutation(v+1,v+1+N)); for(int i=1;i<=N;i++) printf("%d ",v[i]); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/1138.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Silver2] 2210 : 숫자판 점프 (C++) (0) | 2022.11.06 |
---|---|
[BOJ/백준][Silver2] 15664 : N과 M (10) (C++) (0) | 2022.11.06 |
[BOJ/백준][Silver2] 5397 : 키로거 (C++) (0) | 2022.11.06 |
[BOJ/백준][Silver1] 15903 : 카드 합체 놀이 (C++) (0) | 2022.11.06 |
[BOJ/백준][Silver1] 2343 : 기타 레슨 (C++) (0) | 2022.09.26 |