백 트래킹 5

백준 18430번 무기공학 (C++)

문제 링크 : https://www.acmicpc.net/problem/18430 18430번: 무기 공학 첫째 줄에는 길동이가 가지고 있는 나무 재료의 세로, 가로 크기를 의미하는 두 자연수 N, M이 주어진다. (1 ≤ N, M ≤ 5) 다음 N개의 줄에 걸쳐서, 매 줄마다 나무 재료의 각 위치의 강도를 나타내 www.acmicpc.net 문제 요약 핵심 포인트 백 트래킹을 활용해서 풀면 됩니다. 이때 부메랑을 만들 수 있는 4가지 모양을 판별하는 것이 중요합니다. 부메랑의 모양은 일반적인 회전 모형처럼 for문을 돌려서 판별할 경우 갔던 경로를 되돌리는 과정의 구현이 번거로울 수 있으므로, for문을 사용하지 않고 각각 별개로 구현하는 것을 권장합니다. 문제 풀이 전체 코드입니다. #include ..

백준 1987번 알파벳 (C++)

문제 링크 : https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제 요약 1. r*c 크기의 2차원 배열에는 알파벳 대문자들이 적혀있습니다. 2. 시작지점은 배열의 좌측 맨 위쪽이며, 한번의 이동으로 왼쪽, 오른쪽, 위, 아래를 갈 수 있습니다. 3. 같은 알파벳은 두번 이상 지나갈 수 없습니다. 4. 최대한으로 많이 지나갈 수 있는 알파벳의 갯수를 출력하세요. 시작지점인 좌측 맨 위쪽도 지나간 칸에 포함됩니다. 핵심 포인트 전형적인 백..

백준 19942번 다이어트 (C++)

문제 링크 : https://www.acmicpc.net/problem/19942 19942번: 다이어트 식재료 N개 중에서 몇 개를 선택해서 이들의 영양분(단백질, 탄수화물, 지방, 비타민)이 일정 이상이 되어야 한다. 아래 표에 제시된 6가지의 식재료 중에서 몇 개를 선택해서 이들의 영양분의 각 www.acmicpc.net 이 문제의 로직은 크게 다음과 같다. (1) 오름차순으로 방문 순서를 저장한다. 이때 유의해야할점이, n=3의 경우 {1},{1,2},{1,2,3}까지 방문하고 다시 {1,2}로 돌아가지 않도록 주의해야한다. 이럴 경우 아무리 배열의 최대 범위가 15까지라고 하더라고 시간초과가 날 수 밖에 없다. (2) 순서를 저장함과 동시에 여탯껏 저장한 순서들의 칼로리 + 돈을 계산한다. (2..

#2239번 스도쿠 (C++)

링크 : www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 문제에서 주의할 점은 다음과 같다. 1. 여러 답이 있다면 사전식으로 앞서는 것을 출력한다고 언급되어있다. 즉, 작은 숫자를 우선적으로 출력하라는 의미인데 스도쿠는 가로칸 + 세로칸 + 3*3칸에 나오지 않았던 숫자라고 무조건 정답이 되는 것이 아니다. 상황에따라 사용되지 않은 숫자들이 여러개일 때, 답은 한 개일 수도 있다. 2. 문자열과 아스키코드의 변환을 주의하자. 48을 +-해주거나 단순히..

#14888번 연산자 끼워넣기 (c++)

문제 링크 : www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 전형적인 백 트래킹 문제. bool문으로 방문 여부를 확인하지 않고 오로지 if문을 통해 풀 수 있던 점이 편해서 좋았다. #include #include using namespace std; int n=0, mini = INT_MAX, maxi = INT_MIN, arr[12] = {0,}, pl=0, mi=0, mul=0, di=0; vo..