[완전 탐색] 백준 실버4 1018번: 체스판 다시 칠하기(Swift)
·
코테
https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 풀이과정 위 문제는 검정색(B)과 흰색(W)이 무작위로 색칠되어 있는 체스판을 8x8로 잘라 올바르게 다시 색을 칠할 때 칠해야 하는 정사각형의 최소 개수를 출력하는 문제이다. 위 조건에 올바른 체스판의 경우는 두 가지이다. 왼쪽 상단이 W로 시작하는 체스판과 B로 시작하는 체스판이다. 두 올바른 체스판과 임의로 잘라낸 8x8의 체스판과 비교하여 색이 다른 정사각형의 수를 찾으면 된다. l..
[구현] 백준 실버3 2503번: 숫자 야구(Swift)
·
코테
https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 문제 풀이 위 문제는 영수의 질문 결과를 통해 조건에 만족하는 수의 개수를 찾아 출력하는 문제이다. 먼저, 입력값과 탐색 값을 비교하여 스트라이크와 볼의 스코어를 계산하는 메서드를 구현해 준다. func checkScore(_ target: [Character], _ num: [Character]) -> (Int, Int) { var sScoer = 0 var bScoer = 0 for i in ..
[구현 + BFS] 백준 골드3 16236번: 아기 상어(Swift)
·
코테
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 풀이과정 해당 문제는 상어가 먹이를 찾아 먹는 과정에서 이동 거리(시간)을 계산하는 문제이다. 상어가 이동할 수 있는 조건은 물고기가 없는 빈칸(0)이거나 자신보다 사이즈가 같거나 작아야 한다. 또한 먹이는 자신보다 작은 물고기만 먹을 수 있으며, 가까운 순서로 먹는다. 만약 거리가 같은 물고기가 둘 이상이 있다면, 먼저 가장 위에 있는 물고기 그중에서 가장 왼쪽에 있는 물고기를 우선으로 ..
[구현 + 재귀] 백준 골드5 14891번: 톱니바퀴(Swift)
·
코테
https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 풀이과정 해당 문제는 4개의 톱니바퀴가 있으며, 특정 톱니를 시계방향 또는 반시계 방향으로 회전시켰을 때 왼쪽과 오른쪽에 있는 톱니의 맞닿은 부분이 서로 다른 극이면 영향을 받아 회전한 톱니의 반대 방향으로 회전한다. 모든 회전이 끝났을 때 12시 방향의 극에 따라 점수를 계산하고 출력하는 문제이다. 톱니의 극은 배열로 주어지며, 회전을 추적하기 위해 12시 방향을 가리키는 변수를 두어 문제를..
[백트래킹 + 구현] 백준 실버1 14888번: 연산자 끼워넣기(Swift)
·
코테
https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱 www.acmicpc.net 문제풀이 해당 문제는 주어진 수와 연산자를 조합하여 최솟값과 최댓값을 구하는 문제이다. 최솟값과 최댓값을 구해야하므로 백트래킹 기법을 사용하여 모든 경우의 수를 탐색해야 한다. let n = Int(readLine()!)! var numArr: [Int] = readLine()!.split(separator: " ").map { Int($..
[백트래킹 + 구현] 백준 실버2 14889번 스타트와 링크(Swift)
·
코테
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명이 주어지면 N/2명을 뽑아 뽑힌 사람과 뽑히지 않은 사람으로 팀을 나눠 팀 간 능력치 차이의 최솟값을 구하는 문제이다. 때문에 문제의 핵심은 N/2명을 뽑아 두 그룹으로 나눠 백트래킹을 사용하여 모든 능력치의 경우의 수를 계산하고 최솟값을 구하는 것이다. 백트래킹이란? 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법 백트래킹은 쉽게 말해 깊이 우선 탐색(DFS)에 ..