[BFS] 백준 실버1 2178번: 미로 탐색(Swift)
·
코테
https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 풀이과정 그래프이면서, 최단거리를 찾는 문제이기 때문에, BFS를 활용하는 것이 가장 알맞은 방법이다. BFS를 구현하기 위해선 Queue를 활용해야하기 때문에 먼저 Queue를 구현하였다. struct Queue { var memory = [T]() var index = 0 var isEmpty: Bool { memory.count < index + 1 } mutating func inQueue(element: T) { mem..
[다이나믹 프로그래밍] 백준 실버3 1463번: 1로 만들기(Swift)
·
코테
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 풀이과정 먼저, 몇가지 수를 직접 계산해 보았다. 정수 N의 범위는 [1 1 이기 때문에 => 1 3은 3/3 =1 -> 1 이기에 => 1 4는 4/2 = 2 -> 2/2 = 1 -> 1 => 2 5는 5 -1 = 4 -> 4/2 = 2 -> 2/2 = 1 -> 1 => 3 6은 6/3 = 3 -> 3/3 = 1 -> 1 => 2 이정도면, 규칙성이 보인다. 1, 2, 3은 각 0, 1, 1이고, 4부터는 2또는 3으로 나누거나 빼기 1을 하면 미리 계산했던 값이 되는것을 알 수 있다. 규칙성을 좀더 한눈에 ..
[구현 + 재귀] 백준 실버5 17478번: 재귀함수가 뭔가요?(Swift)
·
코테
https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 풀이과정 재귀 함수는 함수 내부에서 자기 자신을 추가로 호출하는 함수이다. 때문에 조건에 따른 제어가 없을 경우 무한이 반복 호출되는 함수가 된다. 제출 Code let count = Int(readLine()!)! let underBar = "____" print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.") answer(c: 0) func answer(c: Int) { p..
[그리디] 백준 브론즈1 4796번: 캠핑(Swift)
·
코테
https://www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 풀이과정 위 문제의 경우 강산이의 L일 휴가 동안 몇일 캠핑장을 이용할 수 있는지 계산하는 문제이다. 해당 캠핑장의 경우 연속된 P일 중 L일을 사용할 수 있다고 한다. 1번 케이스를 예로 들면, 강산의 휴가 기간은 20일이며, 캠핑장의 경우 연속된 8일 동안 5일을 사용할 수 있다. 강산이의 휴가를 8로 나눠보면, 몫이 2이고, 나머지가 4이다. 즉, 강산이의 휴가를 8일씩 나눠보면 8일이..
[이분 탐색] 백준 실버2 2805번: 나무 자르기(Swift)
·
코테
https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 풀이과정 첫 시도는 주어진 나무 중 가장 높은 것을 기준으로 1씩 줄여가며 답을 탐색하였다. 역시, 시간 초과!! 런타임을 줄이기 위해선 탐색 횟수를 줄어야 한다. 때문에 하나씩 줄여가는 것이 아닌 중간 값을 탐색한다. 2번 예시에 따르면 가장 높은 나무는 46 절단기의 높이 최솟값은 0이므로 초기 max = 46 / min = 0 때문에 그에 중간값인 23..
[완전 탐색] 백준 브론즈2 2231번: 분해합(Swift)
·
코테
https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이과정 분해합 문제의 경우 특정수 N에 대하여 생성자를 찾는 문제이다. 생성자 M은 [ M + M의 각 자릿수의 합 = N ] 위 조건을 만족하는 가장 작은 수이다. 위 문제의 경우 1부터 주어진 수 N까지 반복문을 통해 하나씩 대입해도 312ms 시간으로 통과한다. 하지만, 그것이 문제 출제의도는 아닌 것 같아 조건을 통해 시간을 단축시켜 보자. 위에서 언급했듯 생..