백트래킹 8

[백준] 14502 연구소 (Python 파이썬)

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 설명 N x M 크기로 구성된 연구소에 바이러스가 퍼졌다. 연구소의 각 칸은 0, 1, 2로 구성되어 있으며 0은 빈 칸, 1은 벽, 2은 바이러스 이다. 바이러스는 벽을 뚫고 확장할 수 없으며 상하좌우에 인접한 빈 칸으로만 확장이 가능하다. 위 그림과 같이 N x M 모양의 연구소(행렬)가 주어지며, 3개의 벽(1)을 세워야 한다. 3개의 벽을 세웠을 때, 안전영역의 크기(0의 개수)의 최댓값을 구하면..

Algorithm/DFS & BFS 2021.10.17

[백준] 12100 2048 (Easy) (Python 파이썬)

https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 문제 설명 문제에서 주어진 2048 게임을 구현하는 문제이다. 평소의 2048 게임과는 다르게 이동시 새 블록이 추가되지는 않으며 5번 움직였을 때 맵 내의 최대값을 출력하면 된다. 풀이 과정 백트래킹을 이용해 모든 경우의 수에 대해 확인을 해야 하는 브루트포스 문제이다. 움직일 수 있는 방향은 동, 서, 남, 북 4가지 이다. 만약, 동쪽으로 움직인다면 모든 행에 대..

Algorithm/DFS & BFS 2021.10.14

[백준] 14889 스타트와 링크 (Python 파이썬)

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 설명 문제에서 n이 주어지고 1부터 n까지 차례대로 번호가 붙은 사람 n명이 존재한다. 이 n명의 사람을 두 팀으로 나눈 후 각 팀의 시너지의 합을 구하게 되는데 시너지는 문제에서 입력으로 주어진다. n x n 형식의 배열로 주어지며 배열[1][2] 는 1과 2가 한팀일 때의 시너지를 나타낸다. 이 때, 두 팀의 시너지의 합의 최소값을 구하는 문제이다. 풀이 과정 이 문제는 두 팀의 시너지 차이의 최소값을 구해야..

[백준] 14888 연산자 끼워넣기 (Python 파이썬)

문제 설명 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 주어진 숫자와 연산자로 만들 수 있는 수식의 결과값 중 최대값과 최소값을 구하면 됩니다. 풀이 과정 이 문제는 DFS와 백트래킹을 이용했다. 문제에서 연산에 사용할 숫자(A1,A2...An)와 연산자의 개수(b1, b2, b3, b4)가 주어진다. 연산자는 앞에서 부터 차례대로 더하기, 빼기, 곱하기, 나누기 연산자의 개수를 나타낸..

Algorithm/DFS & BFS 2021.10.08

[백준] 2580 스도쿠 (Python 파이썬)

https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제 설명 스도쿠가 주어졌을 때, 빈 칸을 채워 스도쿠를 완성하는 문제이다. 풀이 과정 문제를 풀기전에, 스도쿠가 무엇인지에 대해 먼저 알아야 한다. 자세한 설명은 위 백준 문제링크에 나와있지만 9 x 9 맵에서 가로(행)에 1~9까지 모든 숫자가 들어가야 하고 세로(열)에도 1~9까지의 모든 숫자가 들어가야하고 3x3 정사각형에도 1~9까지의 모든 숫자가 들어가야 한다. 그래서 맵이 주어졌을 때..

Algorithm/DFS & BFS 2021.10.08

[백준] 9663 N-Queen (Python 파이썬)

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 설명 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 풀이 과정 체스판의 퀸은 자신의 줄, 칸, 대각선에 위치한 말을 잡을 수 있다. 이러한 퀸을 N x N의 체스판에 N개 놓을 때 서로 공격할 수 없도록 놓아야 한다. 이 문제는 퀸의 위치를 바꾸어가며 경우의 수를 구하는 DFS+백..

Algorithm/DFS & BFS 2021.10.07

[백준] 15650 N과 M(2) (Python 파이썬)

https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 설명 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 고른 수열은 오름차순이어야 한다. 풀이 과정 1부터 n까지의 수 중, 중복없이 m개의 수를 나열하는 문제이다. 즉, 1부터 n까지의 수 중 m개의 수를 나열하는 중복을 허락하지 않는 순열이다. 단, 수열은 오름차순으로 정..

Algorithm/DFS & BFS 2021.10.03

[백준] 15649 N과 M (Python 파이썬)

https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 설명 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 풀이 과정 1부터 n까지의 수 중, 중복없이 m개의 수를 나열하는 문제이다. 즉, 1부터 n까지의 수 중 m개의 수를 나열하는 중복을 허락하지 않는 순열이다. 예를 들어, n = 4, m = 2일 경우 1부터 4까지의 수..

Algorithm/DFS & BFS 2021.10.03