본문 바로가기

반응형

분류 전체보기

(400)
[BOJ] 백준 11727 2xn 타일링 2 (Swift) 문제https://www.acmicpc.net/problem/11727풀이dp로 풀 수 있는 문제2x1 을 놓을 수 있는 경우의 수 = 12x2 을 놓을 수 있는 경우의 수 = 3 이지만, || 블럭을 제외하면 2개이다.2x3을 놓을 수 있는 경우의 수는 5이고, 직접 그려서 세보았다.이것을 어떻게 도출해 낼 수 있을지 한 번 생각해보자.2x1 까지 채워져 있는 경우, 해당 경우에서 '=' 블럭과, 2x2 블럭을 넣는 두가지 경우가 있다.2x2 까지 채워져 있는 경우에는 | 블럭밖에 놓을 수 없다.여기서 점화식을 도출 할 수 있다.$f(1) = 1, f(2) = 3$$f(n) = f(n-1) + 2*f(n-2)$소스코드후기기본적인 dp 문제였다.
[BOJ] 백준 9375 패션왕 신해빈 (Swift) 문제https://www.acmicpc.net/problem/9375 풀이조합 문제이다.옷이 2벌 바지가 3벌 있다면, 옷과 바지를 조합해서 입는 경우의 수는 단순히 2 * 3 = 6으로 나타낼 수 있다.하지만 이 문제에서는 옷만 입거나 바지만 입는 경우도 가능하다.단, 모두 입지 않은 경우를 제외해야한다.따라서 옷이 2벌있다고해도 안입는 경우 까지 총 3벌이 있다고 가정할 수 있다.물론 바지도 마찬가지다.그러면, 3 * 4 = 12 로 나타낼 수 있다.하지만 모두 안입는 경우의 수는 1이다. 해당 경우의 수를 뺴주어야 한다.dictionary를 사용하여 종류를 구분하였고, value의 갯수를 세어 배열로 만들어주었다.해당 배열의 원소들에게 전부 +1을 해주고, 원소들끼리 곱한 후 마지막에 1을 빼주면 ..
[BOJ] 백준 1074 Z (Swift) 문제풀이문제에서 주어진 표를 2 * 2 형태가 될 때 까지 분할을 해주어야 한다.n이 3이라면, 8 x 8 형태일 것이고, 4개로 분할을 하면 중간값이 4일 것이다.즉 중간값은 $2^n % 2$로 볼 수 있다.중간 값이 정해졌다면, 좌표가 어느 공간에 속했는지 확인해주자.y값이 0 ~ mid 사이, x 값이 0 ~ mid 사이y값이 0 ~ mid 사이, x 값이 mid ~ $2^n$ 사이y값이 mid ~ $2^n$ 사이, x 값이 0 ~ mid 사이y값이 mid ~ $2^n$ 사이, x 값이 mid ~ $2^n$ 사이n이 1이 될 때 까지 n을 1씩 줄여 반복을 해주면 y,x 값이 0 ~ 1 사이에 있을 것이다.구간을 찾으면서, 해당 구간의 시작점? 을 누적해서 더해주어야 한다.n이 3이라고 가정했을 때..
[UIKit] iOS 14에서 Compositional Layout 빈 공간 생기는 이슈 해결 이번에 UICollectionView에 Compositional Layout 샘플코드를 작성해봤다.DiffableDataSource도 같이 사용했다.다음과 같은 UI를 구현하였다.이미지를 보면 알겠지만, 위에 섹션은 가로스크롤 하단 섹션은 세로스크롤로 구성하였다.가로스크롤 되는 Cell에 컬러값을 넣었지만, 실제로 API 통신 등을 통해 데이터를 불러오고,불러온 데이터가 없으면 해당 섹션을 보여주지 않도록 구현하려고 했다.내 지식으로는 데이터가 없으면 datasource에 apply 하지 않기 때문에 해당 영역이 눈에 보이지 않을 것이라고 생각했고,생각대로 구현 되었다.수정한 코드 조각은 다음과 같다.구현된 UI는 다음과 같다. (iOS 18.x.x 환경)그런데 iOS 14.x.x 환경에서는 아예 가려지..
[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)$의 시..

반응형