본문 바로가기

완전탐색

(34)
[백준 / BOJ] 19942 다이어트 문제 출처 : www.acmicpc.net/problem/19942 19942번: 다이어트 식재료 N개 중에서 몇 개를 선택해서 이들의 영양분(단백질, 탄수화물, 지방, 비타민)이 일정 이상이 되어야 한다. 아래 표에 제시된 6가지의 식재료 중에서 몇 개를 선택해서 이들의 영양분의 각 www.acmicpc.net 식재료 N개중 몇개를 선택해서 이들의 영양분(단백질 탄수화물 지방 비타민)이 일정이상이 되어야한다. 각 식재료에는 가격이있다. 이때, 가격을 최소로하는 식재료 조합을 찾는 문제였다. 풀이 완전탐색으로 풀은 문제다. 탐색마다 영양소를 선택하는 경우, 선택하지 않는경우로 총 2가지 선택지가 있으므로, 최대 반복횟수는 2^15가 된다. 풀이는 간단한데, 단백질 탄수화물 지방 비타민 이 있을때, 각각의..
[백준 / BOJ] 9663 N-Queen 문제 출처 : www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net N*N의 체스판에 N개의 퀸을 서로 공격할수없도록 배치해야한다. 이때, 퀸을 놓는 경우의 수를 구하는 문제다. 풀이 N의 최댓값이 15이다. 따라서, 최악의경우 15 * 15의 판에 15개의 퀸을 놓는 경우이므로, 15! * 15^3 만큼 반복하게된다. 따라서, 모든경우를 봐줄려하면 시간초과가 나게된다. 시간초과를 피하기 위해서 체크배열을 이용해서 해당 위치에 퀸을 놓을수있는지 없는지 봐줘야한다. 퀸은 가로 세로..
[백준 / BOJ] 3213 피자 문제 출처 : www.acmicpc.net/problem/3213 3213번: 피자 첫째 줄에 친구의 수 N이 주어진다. (1 ≤ N ≤ 10,000) 다음 N개 줄에는 각 친구가 먹을 수 있는 피자의 양이 주어진다. 이 값은 항상 분수이며, 1/4, 1/2, 3/4중 하나이다. www.acmicpc.net 상근이의 친구들은 피자를 먹는데, 무조건 1/4, 3/4, 1/2크기만큼 먹을수있다. 이때, 상근이가 시켜야하는 최소한의 피자양을 구하는문제다. (1/4 3/4 1/2 만큼의 조각을 나눠서 먹는것이 아닌, 한번에 먹어야한다 ) 풀이 예제를 전부 더해보면 2가 나와서 2판만 시키면되는데, 출력은 3이나와서 뭔가했다... 알고보니 (번역본에는 안 나와있는데 본문에는 나와있음) 조각을 나눠서 먹으면 안되고..
[백준 / BOJ] 18512 점프 점프 문제 출처 : www.acmicpc.net/problem/18512 18512번: 점프 점프 첫째 줄에 두 사람이 한 번에 멀리뛰기를 하는 거리 X, Y와 시작 지점의 위치 값 P1, P2가 각각 공백을 기준으로 구분되어 자연수로 주어진다. (1 ≤ X, Y, P1, P2 ≤ 100) www.acmicpc.net 두 학생 A,B가 각각의 시작위치에서 출발하고 P1 P2만큼 움직일때, 가장 처음 만나게 되는 지점을 출력하는 문제다. 풀이 P1 P2에서 시작했을때 두 학생의 시작지점과 한번에 점프하는 거리가 학생끼리 서로소인지?? 판별해서 푸는문제 같았는데, X,Y,P1,P2의 최댓값이 100 이길래 완전탐색으로 풀어줬다. 계산해보지는 않았지만, 최댓값이 100밖에 안되므로, 10만번 돌았을때도 만나지 않는..
[백준 / BOJ] 3042 트리플렛 문제 출처 : www.acmicpc.net/problem/3042 3042번: 트리플렛 상근이와 창영이는 트리플렛이라는 게임을 하고 있다. 이 게임을 하려면 칠판에 N*N 그리드를 그려야 한다. 그 다음 알파벳 대문자를 적절히 각 칸에 써 넣는다. 한 알파벳을 여러 칸에 쓸 수는 �� www.acmicpc.net N*N그리드가 주어지고, 각 칸에 알파벳 혹은 '.'이 주어진다. 이때 3개의 알파벳이 한 직선을 이루면 이를 트리플렛 이라고 한다. 예를들어, ...A ..B. .C.. D... 은 ABC가 하나의 트리플렛을 이룬다, BCD가 트리플렛을 이룬다... 라고 생각하면된다. 풀이 그냥 완전탐색을 할경우, N이 최대 100이고 N*N이므로, 칸의 총 갯수는 100*100 = 10000개이다. 여기서 ..
[백준 / BOJ] 15658 연산자 끼워넣기 (2) 문제 출처 : www.acmicpc.net/problem/15658 15658번: 연산자 끼워넣기 (2) N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 연산자의 개수� www.acmicpc.net N개의 수가 주어지고, +, -, *, /연산자의 갯수가 주어진다. 이때, N개의 수와 연산자들로 만들수있는 조합중 최댓값과 최솟값을 찾는문제다. (단, 주어진 수의 순서를 꾸면 안된다.) 풀이 백트래킹을 이용한, 구현문제다. 연산자와 숫자를 전부 사용하지않고도 최댓값, 최솟값이 나올수있다는 조건을 주의하면서 코딩하자. ope[i] = 연산자 사용가능 ..
[백준 / BOJ] 1034 램프 문제 출처 : www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져� www.acmicpc.net N*M배열의 각 칸마다 램프가 들어있고, 한 행이 전부 켜져있을때, 그 행이 켜져있다고 말한다. 램프는 껏다킬수있는데, 한 램프를 선택해서 램프를 키면, 그 램프가 들어있는 행의 모든 열이 다 켜진다. N*M배열의 크기와 각 칸에 들어있는 램프의 상태가 주어졌을때, K번 램프를 껏다킨후 켜져있는 행의 최댓값을 구하는 문제다. 풀이 완전탐색으로 접근하면 시간초과가 날거같아서 ((1000 *..
[백준 / BOJ] 17349 1루수가 누구야 문제 출처 : www.acmicpc.net/problem/17349 17349번: 1루수가 누구야 (1 2)가 거짓말이라면, 선수 2가 1루수라는 주장과 1루수가 아니라는 주장이 동시에 존재하여 모순이다. (0 4)가 거짓말인 경우도, 마찬가지의 이유로 모순이다. (0 2)가 거짓말인 경우, 선수 2를 유�� www.acmicpc.net 총 9명의 선수중 1루수가 누구인지 찾는 문제이다. 9개의 줄에거쳐 각 선수가 주장을하는데 무조건 한명은 거짓말을 하고있다. 선수들의 주장은 1 A: 선수 A가 1루수이다. 0 A: 선수 A는 1루수가 아니다. 로 나타난다. (단, 1루수를 찾을수 없으면 -1을 출력한다.) 풀이 "한명의 선수가 거짓말을 하고있다." 는 조건이 있으니, 1번 선수가 거짓말을 할때, 2번 ..