본문 바로가기

반응형

PS

(334)
[BOJ] 백준 14940 쉬운 최단거리 (Swift) 문제https://www.acmicpc.net/problem/14940 풀이BFS로 쉽게 풀 수 있는 문제이다.다만 문제에 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다. 라는 문장이 있어BFS를 한번 돌리고 난 이후 검사를 해서, 갈 수 있는 땅인데 도달하지 못했다면 -1로 변경시켜주는 과정을 거쳤다.소스코드후기기본적인 BFS 문제였다.
[BOJ] 백준 11726 2xn 타일링 (Swift) 문제https://www.acmicpc.net/problem/11726풀이dp로 풀이할 수 있는 문제$f(1) = 1, f(2) = 2$ 이다. 이는 그림을 그리면 쉽게 확인할 수 있다.f(3)을 구해야하는데, 이는 $f(1)$에다가 2x2의 타일을 하나 붙이기 + $f(2)$ 에다가 2x1 타일을 하나 붙인 것과 동일하다.2x2 타일은 || 이렇게 생긴 타일은 붙일 수가 없다.f(3)을 예시로 들면 f(1)이 | 이라고 가정하고, 2x2인 || 타일을 붙인다고 가정할 때, f(2)인 || 타일에 |을 붙이는 것과 동일하기 때문이다.따라서 2x2 타일은 = 와 같인 타일밖에 붙일 수 없다.점화식은 다음과 같다.$f(1) = 1, f(2) = 2$$f(n) = f(n - 1) + f(n - 2)$소스코드후..
[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과..

반응형