[구현] 백준 실버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)에 ..
[다이나믹 프로그래밍 + 구현] 백준 실버3 14501번: 퇴사(Swift)
·
코테
https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이과정 이번 문제는 주어진 백준이 주어진 N + 1일 동안 업무를 했을 때 벌 수 있는 최대 누적 금액을 구하는 문제이다. 최대 누적 금액을 구하는 문제이기 때문에 DP를 활용하면 쉽게 접근할 수 있겠다는 생각이 들었다. 처음엔, DP 배열에 일차 별로 벌 수 있는 최대 누적 금액을 담으려 했지만, 그러면 일을 시작하고 끝나는 날을 카운팅 하기 쉽지 않았다. 때문에 끝나는 날을 기준으로 DP에 누적 금액을 담았다. 예를 들어, 1일차 상담을 시작하면 상담이 끝나는 날은 4일이다. 때문에 DP[4]에 해당 금액을 담는다. 이런 식으로..