백트래킹 50

백준 21278번 호석이 두 마리 치킨 C++

https://www.acmicpc.net/problem/21278 21278번: 호석이 두 마리 치킨 위의 그림과 같이 1번과 2번 건물에 치킨집을 짓게 되면 1번부터 5번 건물에 대해 치킨집까지의 왕복 시간이 0, 0, 2, 2, 2 로 최소가 된다. 2번과 3번 건물에 지어도 동일한 왕복 시간이 나오지만 더 www.acmicpc.net 플로이드 워셜로 각 건물과의 거리를 전부 구하고 백트래킹을 통해 두개의 치킨집과의 왕복 거리의 합이 가장 적은 두 건물을 골랐다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #includ..

알고리즘 2023.06.08

백준 15664번 N과 M(10) C++

https://www.acmicpc.net/problem/15664 15664번: N과 M (10) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 백트래킹을 하는데, 비내림차순으로 하고, 중복을 제거해야한다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long lo..

알고리즘 2023.05.30

백준 19942번 다이어트 C++

https://www.acmicpc.net/problem/19942 19942번: 다이어트 식재료 N개 중에서 몇 개를 선택해서 이들의 영양분(단백질, 탄수화물, 지방, 비타민)이 일정 이상이 되어야 한다. 아래 표에 제시된 6가지의 식재료 중에서 몇 개를 선택해서 이들의 영양분의 각 www.acmicpc.net 백트래킹으로 모든 조합을 검사하며 조건을 만족하면서 가격이 최소인 조합을 찾았다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64..

알고리즘 2023.05.27

백준 16938번 캠프 준비 C++

https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net 백트래킹으로 문제 수, 점수의 합, 최고점, 최저점을 추적하면서 풀었다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long long; int n, l, r, x; int ans = 0; vector v; vector visited; v..

알고리즘 2023.05.21

백준 17085번 십자가 2개 놓기 C++

https://www.acmicpc.net/problem/17085 17085번: 십자가 2개 놓기 첫째 줄에 격자판의 크기 N, M (2 ≤ N, M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에 격자판의 상태가 주어진다. 항상 두 개의 십자가를 놓을 수 있는 경우만 입력으로 주어진다. www.acmicpc.net 백트래킹으로 십자가를 놓을 수 있는 좌표 2개를 찾고 거기서 설치할 수 있는 십자가의 곱의 최대값을 구하면 된다. 세가지 경우를 생각해서 그중 가장 큰 값을 구하였다. 1 : 좌표 1의 최대 십자가 크기를 구한 뒤 좌표 2의 최대 크기를 구한다. 2 : 좌표 2의 최대 십자가 크기를 구한 뒤 좌표 1의 최대 크기를 구한다. 3 : 좌표1, 좌표 2의 크기를 동시에 늘려가며 가능한 최대 크기..

알고리즘 2023.05.14

백준 21735번 눈덩이 굴리기 C++

https://www.acmicpc.net/problem/21735 21735번: 눈덩이 굴리기 눈송이들이 많은 동네인 숙명여대 앞마당에서 눈사람 만들기 대회를 연다. 앞마당의 길이는 $N$이고 위치 $1$부터 위치 $N$ 까지만 눈이 쌓여있다. 위치 $i$에 눈이 $a_i$만큼 쌓여있다. 대회 규칙은 www.acmicpc.net 백트래킹 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long long; int n, m; vector ..

알고리즘 2023.04.22

백준 19949번 영재의 시험 C++

https://www.acmicpc.net/problem/19949 19949번: 영재의 시험 컴퓨터공학과 학생인 영재는 이번 학기에 알고리즘 수업을 수강한다. 평소에 자신의 실력을 맹신한 영재는 시험 전날까지 공부를 하지 않았다. 당연하게도 문제를 하나도 풀지 못하였지만 다행 www.acmicpc.net 백트래킹 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long long; int ans = 0; const int SIZE = 1..

알고리즘 2023.04.21

백준 3967번 매직 스타 C++

https://www.acmicpc.net/problem/3967 3967번: 매직 스타 매직 스타의 모양이 주어진다. 수가 채워져 있지 않은 곳은 x로, 채워져 있는 곳은 'A'부터 'L'까지 알파벳으로 채워져 있다. i번째 알파벳은 숫자 i를 의미한다. '.'는 매직 스타의 형태를 만들기 www.acmicpc.net 백트래킹 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long long; int cnt = 0; vector use..

알고리즘 2023.04.14

백준 11578번 팀원 모집 C++

https://www.acmicpc.net/problem/11578 11578번: 팀원 모집 3번 학생과 4번 학생을 선택하면 1번부터 5번까지 모든 문제를 풀 수 있는 팀을 만들 수 있다. 1번, 2번, 4번 학생을 선택해도 모든 문제를 다 풀 수 있지만 팀원의 수가 3명이라 답이 될 수 없다. www.acmicpc.net n과 m이 10 이하이기 때문에 팀이 될 수 있는 모든 경우를 구해서 모든 문제를 풀 수 있는 가장 인원이 적은 팀을 구한다. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ..

알고리즘 2023.03.30

백준18429번 근손실 C++

https://www.acmicpc.net/problem/18429 18429번: 근손실 웨이트 트레이닝을 좋아하는 어떤 대학원생은, 현재 3대 운동 중량 500의 괴력을 소유하고 있다. 다만, 하루가 지날 때마다 중량이 K만큼 감소한다. 예를 들어 K=4일 때, 3일이 지나면 중량이 488로 www.acmicpc.net 백트래킹 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using int64 = long long; int n, k; int ans = 0;..

알고리즘 2023.02.23