본문 바로가기

반응형

Swift

(356)
[BOJ] 백준 9095 1, 2, 3 더하기 (Swift) 문제https://www.acmicpc.net/problem/9095풀이dp로 쉽게 풀 수 있는 문제이다.1을 만드는 방법은 1 단 하나이다.2를 만드는 방법은 1 + 1, 2 두개3을 만드는 방법은 1 + 1 + 1, 2 + 1, 1 + 2, 3 총 4개이다.여기서 4를 만드는 방법을 구하면 다음과 같이 해석할 수 있다.1을 만드는 방법 + 32를 만드는 방법 + 23을 만드는 방법 + 11, 2, 3을 이용해 4를 만드는 방법은 총 7가지다.5, 6, 7.. 도 동일하게 적용할 수 있다.점화식은 다음과 같다.$f(1) = 1, f(2) = 2, f(3) = 4$$f(n) = f(n-3) + f(n-2) + f(n-1)$소스코드후기기본적인 dp 문제였다.
[BOJ] 백준 1003 피보나치 함수 (Swift) 문제https://www.acmicpc.net/problem/1003풀이시간제한이 0.25초로 짧은 편에 속하는 문제이다.문제에서 주어진 대로 소스코드를 짠다면 시간복잡도는 $O(2^n)$이고, n이 최대 40이므로 0.25초 내에는 풀 수 없어 다른 방법으로 풀이해야한다.f(2)를 구한다면 f(1), f(0)이 호출된다.f(3)은 f(2) + f(1) 이므로, f(3) = f(1) + f(0) + f(1)이된다.f(4)는 f(3) + f(2) 이므로 ...f(0) = (0, 1), f(1) = (1, 0) 로 초기값을 설정하여, dp를 활용해서 풀 수 있을 것 같아서 풀이하였다.$f(n) = f(n - 1) + f(n - 2)$$f(0) = (0, 1), f(1) = (1, 0)$이는 $O(n)$의 시..
[BOJ] 백준 17219 비밀번호 찾기 (Swift) 문제https://www.acmicpc.net/problem/17219풀이Dictionary에 대한 이해만 있다면 쉽게 풀 수 있는 문제[String: String] 형태의 빈 Dictionary 프로퍼티를 생성하고, n개의 입력만큼 key value로 할당해준다.그 이후, dictionary에 value를 출력해주면 되는 문제이 문제에서는 '반드시 이미 저장된 사이트 주소가 입력된다.' 라는 문장이 있기 때문에 강제 언래핑을 해줘도 무방하다.소스코드후기난이도가 실버 4로 책정이 되었는데, Dictionary만 알고 있다면 브론즈 수준의 문제
[BOJ] 백준 1240 노드사이의 거리 (Swift) 문제https://www.acmicpc.net/problem/1240풀이이 문제에서 명확하게 "트리" 라고 알려주었다."트리"는 무뱡항 그래프이다.DFS, BFS로 트리를 구현해서 풀 수 있겠다고 생각했다.DFS, BFS로 풀 때, 간선의 비용을 graph에 저장해두어야 겠다고 생각했다.그래서 그래프의 자료형을 [[(Int, Int)]] 형식으로 튜플의 2차원 배열로 선언해주어야겠다고 생각했다.물론 Struct나 Class, typealias 만들어줬어도 상관없다.첫번째로 풀이했을 때는 DFS로 풀어보았다.문제에서 간선의 개수는 노드의 개수 - 1 이고 같은 노드 번호는 주어지지 않으므로, 모든 노드가 연결되어있음을 알 수 있었다.startNode에서 DFS를 수행했다. startNode에서 DFS를 수..
[BOJ] 백준 2346 풍선 터뜨리기(Swift) 문제https://www.acmicpc.net/problem/2346풀이오른쪽으로 이동하는 것 (양수)인 경우에는array.append(array.removeFirst()) 를 통해 맨 앞으로 이동시킬 수 있다.주의할 점으로는 적힌 숫자보다 -1 만큼 이동을 시켜주어야 한다.예를 들어 다음과 같은 배열이 있을 때를 생각해보자.array = [2, -1, 1]가장 앞에 있는 2가 터지고 2만큼 뒤에있는 1이 터져야 할 상황이다.2가 터졌기 때문에 index가 자연스럽게 1이 줄어들게 된다.[-1, 1]array.append(array.removeFirst()) 수행 시 다음과 같다.[1, -1]한 번만 수행해도, 1이 가장 앞에 위치하는 것을 확인할 수 있다.왼쪽으로 이동하는 방식은 (음수) 다음과 같이 ..
[BOJ] 백준 14502 연구소(Swift) 문제https://www.acmicpc.net/problem/14502풀이접근 방법그래프에서 0 -> 1로 변경시켜주어야 하는 작업이 필요할 것0 -> 1로 3개를 변경해주어야 하는 작업이 필요하기 때문에, 0의 위치들 중에서 3개를 뽑는 조합 알고리즘의 필요성을 느낌0의 위치를 배열로 담아주어야겠다고 생각함for문 3개로 0 -> 1로 바꿔주는 방법을 하려고 했지만 이 문제에서는 필요없겠지만 추후 확장성을 위해 조합알고리즘을 짜야겠다고 생각함0 -> 1로 3개를 변경했다면, 바이러스(2)에서 BFS를 수행해야겠다고 생각함2의 위치를 배열로 담아주어야겠다고 생각함BFS를 수행 이후 0의 개수를 세고 max 값을 찾는다. 그리고 0 -> 1로 바꿔준 부분을 되돌려주어야 함 (백트래킹)반복..이 문제는 n과..
[BOJ] 백준 28279 덱 2 (Swift) 문제https://www.acmicpc.net/problem/28279 풀이덱 자료구조는 이전에 포스팅 해두었다.구현해놓은 덱 자료구조를 가지고, 풀면 되는 문제..소스코드후기덱 자료구조만 구현한다면 쉽게 풀 수 있는 문제덱 구현하는게 쫌 귀찮고 까다롭다..
[BOJ] 백준 1389 케빈 베이컨의 6단계 법칙 (Swift) 문제https://www.acmicpc.net/problem/1389풀이이 문제를 처음 봤을 때, 간선의 비용이 동일하다는 점. 최단 경로를 구해야 한다는 점에서 BFS 알고리즘을 떠올렸다.BFS의 시간복잡도가 어떻게 될까도 생각해봤다.$O(V + E)$ 라는 점, 최악의 경우 $O(100 + 5000)$ 이 될 것이라고 생각했다.또한 모든 친구($N$)에 대해 검사를 해봐야 하므로, $O(V * (V + E))$ 이지 않을까..?$100 \times 5100$라면 충분히 통과할 것이라고 생각했다.처음엔 다음과 같이 생각했다.1번노드에서 각 노드로 도달하는 depth를 전부 구해 더해줘야겠다라고 생각했다.즉, 1번 -> 2번으로 가능 최소비용 + 1번 -> 3번으로 가능 최소비용.. 이렇게 전부 구해야지..

반응형