BOJ

[BOJ] 백준 16938번 캠프 준비 C++

2022. 4. 7. 15:46
목차
  1. 문제
  2. 풀이
  3. 코드

문제

https://www.acmicpc.net/problem/16938

 

16938번: 캠프 준비

난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다.

www.acmicpc.net

풀이

백트래킹으로 문제에 대한 조합을 구해주면 되는데 (문제가 2개일때 ~ 모든 문제를 전부 사용했을때)에 대한 모든 상황에 대해 조합을 돌려주어야 모든 경우의 수를 확인할 수 있다. 조합을 돌리다 조합이 완성되면 check함수를 통해 그 조합이 문제의 조건에 성립하는지 확인해주었고 성립한다면 경우의 수를 증가시켜주었다.

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

int n, l, r, x;
int result = 0;
vector<int> level;
vector<int> problems;
bool isused[16];

bool check()
{
	int sum = 0;

	for (int i = 0; i < problems.size(); i++)
	{
		sum += problems[i];
	}

	sort(problems.begin(), problems.end());

	if (sum >= l && sum <= r && (problems.back() - problems.front()) >= x)
	{
		return true;
	}
	return false;
}

void func(int k, int cnt, int pivot)
{
	if (k == pivot)
	{
		for (int i = 0; i < level.size(); i++)
		{
			if (isused[i])
			{
				problems.push_back(level[i]);
			}
		}
		if (check())
		{
			result++;
		}
		problems.clear();
		return;
	}

	for (int i = cnt; i < level.size(); i++)
	{
		if (!isused[i])
		{
			isused[i] = true;
			func(k + 1, i + 1, pivot);
			isused[i] = false;
		}
	}
}

int main()
{
	cin.tie(0);
	ios::sync_with_stdio(0);

	cin >> n >> l >> r >> x;

	for (int i = 0; i < n; i++)
	{
		int a;
		cin >> a;
		level.push_back(a);
	}

	for (int i = 2; i < level.size() + 1; i++)
	{
		func(0, 0, i);
		memset(isused, false, sizeof(isused));
	}

	cout << result;
}
저작자표시 비영리 동일조건 (새창열림)

'BOJ' 카테고리의 다른 글

[BOJ] 백준 23352번 방탈출 C++ (제1회 한국항공대학교 프로그래밍 경진대회 문제)  (0) 2022.05.18
[BOJ] 백준 16194번 카드 구매하기 2 C++  (0) 2022.04.12
[BOJ] 백준 2146번 다리 만들기 C++  (0) 2022.04.06
[BOJ] 백준 1987번 알파벳 C++  (0) 2022.04.05
[BOJ] 백준 1600번 말이 되고픈 원숭이 C++  (0) 2022.04.04
  1. 문제
  2. 풀이
  3. 코드
'BOJ' 카테고리의 다른 글
  • [BOJ] 백준 23352번 방탈출 C++ (제1회 한국항공대학교 프로그래밍 경진대회 문제)
  • [BOJ] 백준 16194번 카드 구매하기 2 C++
  • [BOJ] 백준 2146번 다리 만들기 C++
  • [BOJ] 백준 1987번 알파벳 C++
Doshisha
Doshisha
DoshishaDoshisha 님의 블로그입니다.
Doshisha
Doshisha
Doshisha
전체
오늘
어제
  • 분류 전체보기
    • Java
    • Spring
    • Project
      • Gameple
      • 피파온라인 검색 사이트
    • Node.js
    • DBMS
      • MySQL
      • MSSQL
    • AWS
    • BOJ
    • 프로그래머스
    • 프로그래머스-SQL
    • 컴퓨터 구조
    • 네트워크
    • Git
    • IDE
    • 후기 및 회고
    • 기타
    • Linux
    • Frontend
      • Vue.js
      • jQuery
      • JavaScript
    • Unity
    • WAS
      • Tomcat
    • Jenkins

블로그 메뉴

  • 방명록
  • Github

공지사항

인기 글

태그

  • 문자열
  • 네트워크
  • c++
  • MySQL
  • Spring Data JPA
  • C++ BFS
  • Gameple
  • mysql 서브쿼리
  • java
  • 게임 플랫폼 개발
  • SpringBoot Jenkins
  • 백트래킹
  • 코테
  • 게임 API 연동
  • SpringBoot Jenkins CI/CD
  • 구현
  • BFS
  • boj
  • 프로그래머스
  • 카카오 코테
  • 카카오 코딩테스트
  • 프로그래머스 SQL
  • 넥슨 오픈 API
  • 일본
  • DP
  • 모두의 네트워크
  • 게임 플랫폼
  • 백준
  • 카카오
  • 자바

최근 댓글

최근 글

hELLO · Designed By 정상우.
Doshisha
[BOJ] 백준 16938번 캠프 준비 C++
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.