Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바스크립트 게임
- portal
- 1인 게임 개발
- 프로그래머스 #최소힙 #우선순위 큐
- 게임제작
- 게임 개발
- 유니티3d
- 유니티 3D
- Unity #Unity2D #Portal
- 3회차
- 필기
- Vampire Survivors
- 게임 제작
- 정처기 필기
- 합격
- 정처기
- 1인 개발
- 토이 프로젝트
- 자바스크립트
- 유니티
- Unity
- 퐁
- 1인 게임 제작
- 1인 게임
- 게임
- FPS
- Unity2D
- unity3d
- 정보처리기사
- Pong
Archives
- Today
- Total
Coding Feature.
백준) 16938번: 캠프 준비 in C 본문
Solution.
정렬 알고리즘과 백트레킹 중 DFS 를 통해 풀이했다.
먼저 오름차순으로 문제의 난이도를 정렬해놓고 풀면 훨씬 좋을 것 같다는 판단 하에 버블 정렬을 이용했다.
그리고 이 문제는 조합으로 풀 수 있을 것 같아 DFS 알고리즘을 사용했다.
DFS 를 하면서 다음과 같은 세 가지 조건이 만족하는 경우 count 를 1씩 늘려가며 답을 구했다.
1) 조합으로 만들어진 원소들의 합이 L보다 크거나 같다. (total >= L)
2) 조합으로 만들어진 원소들의 합이 R보다 작거나 같다. (total <= R)
3) 조합의 가장 작은 원소 값과 가장 큰 원소 값의 차이가 X보다 크거나 같다. (A[cur] - A[first] >= X)
이때 3번 조건은 이미 오름차순으로 정렬된 수열을 가지고 서칭을 하는 것이므로 DFS 시작할 때의 원소 값이 가장 작은 값이 될 것이고, DFS에서 가장 최근에 탐색한 원소 값이 가장 큰 값이 될 것이다. (first, cur).
Code.
#include <stdio.h>
int N, A[15], first, L, R, X, count;
void sort(int *arr, int n){
int temp, i, j;
for(i=0;i<n-1;i++){
for(j=0;j<n-1;j++){
if(arr[j] > arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
};
void dfs(int cur, int total){
int i, X_temp;
X_temp = A[cur] - A[first];
if((X_temp >= X) && (total >= L) && (total <= R))
count++;
for(i=cur+1;i<N;i++){
dfs(i, total+A[i]);
}
};
int main(){
int i;
count = 0;
scanf("%d %d %d %d", &N, &L, &R, &X);
for(i=0;i<N;i++)
scanf("%d", &A[i]);
sort(A, N);
for(i=0;i<N;i++){
first = i;
dfs(i, A[i]);
}
printf("%d\n", count);
return 0;
}
'코딩테스트 > 백준 solved.ac' 카테고리의 다른 글
백준) 1695번: 팰린드롬 만들기 in C (0) | 2023.07.27 |
---|---|
백준) 1697번: 숨바꼭질 in C (0) | 2023.07.26 |
백준) 16936번: 나3곱2 in C (0) | 2023.07.09 |
백준) 16924번: 십자가 찾기 in C (0) | 2023.07.07 |
백준) 16922번 : 로마 숫자 만들기 in C (0) | 2023.07.06 |