분류 전체보기
-
[iOS 14] Auto Layout을 이용하여 페이스북의 Bottom Sheet을 만들어보자! - Part 1프로그래밍/iOS 2021. 5. 21. 21:45
⚠️ 주의 : 해당 글은 Storyboard가 아닌 Code를 이용하여 Auto Layout을 만듭니다! 아직 코드로 Auto Layout을 짜는 게 익숙하지 않은 분들에겐 어려운 내용일 수 있습니다. 안녕하세요! 제이티입니다. 오늘은 Bottom Sheet을 처음부터 프레임워크를 사용하지 않고 만들어보도록 하겠습니다! 만들기 전에 먼저 Bottom Sheet이 어떤 건지 보고 가도록 할까요? Bottom Sheet이란? iOS 앱을 사용하다보면 버튼을 탭했을 때 Card 모양의 Modal이 하단에서 나올 때가 있죠! 이 Modal을 사용자가 드래그하여 움직이거나 닫는 게 가능하구요. 어떤 건지 이해가 안되실 것 같아 이미지를 첨부할게요! 페이스북이나 슬랙에서 사용되는 Bottom Sheet의 이미지랍니..
-
[C++] BOJ 1699번: 제곱수의 합프로그래밍/알고리즘 PS 2020. 12. 8. 11:08
문제 링크 문제 설명 DP를 이용하여 문제를 해결하였다. dp1에는 1~루트 N의 제곱수를 저장하였고, dp2에는 N을 제곱수들의 합으로 표현할 때에 그 항의 최소개수를 저장하였다. 코드 #include #define MAX 987654321 using namespace std; int num; int dp1[400]; // n의 제곱을 저장 int dp2[100006]; int main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> num; for (int i = 1; i * i
-
[C++] BOJ 2579번: 계단 오르기프로그래밍/알고리즘 PS 2020. 12. 8. 09:57
문제 링크 문제 풀이 DP를 이용하여 문제를 해결하였다. N번째 계단을 한 번 밟았을 때의 최대 점수를 dp1, 두 번 밟았을 때를 dp2에 저장하고 해당 칸을 밟았을 때의 최대 점수를 dp에 저장하였다. 코드 #include using namespace std; int dp1[400]; // 계단 한 번 밟기 int dp2[400]; // 계단 두 번 밟기 int dp[400]; int scores[400]; int N; int main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for (int i = 1; i > scores[i]; dp1[1] = scores[1]; dp2[1] = 0; dp[1] = scores[1]; dp1..
-
[C++] BOJ 1912번: 연속합프로그래밍/알고리즘 PS 2020. 12. 1. 09:44
문제 링크 문제 풀이 해당 문제를 DP(Dynamic Programming) 알고리즘을 이용하여 해결할 수 있다. dp[i] = dp[i-1] + arr[i], 단 (dp[i-1] + arr[i]) < 0일 경우 dp[i] = 0. 위의 식은 i = 0... n-1에 대하여 arr[i] < 0일 경우엔 성립되지 않음에 주의하자. 코드 #include using namespace std; int arr[100006]; int n; int result; int dp[100006]; // 연속된 수열의 합 중 n번째까지 가장 큰 합 void calcDp() { bool allMinus = true; dp[0] = arr[0]; result = -9999; for (int i = 0; i < n; i++) { ..
-
[C++] BOJ 11054번: 가장 긴 바이토닉 부분 수열카테고리 없음 2020. 11. 30. 11:36
문제 링크 풀이 설명 DP를 이용하여 문제를 해결하였다. 증가하는 부분 수열에 대한 DP값을 저장하는 dp1과 바이토닉 부분 수열에 대한 DP값을 저장하는 dp2 수열로 나누어 각각의 값을 계산하였다. 코드 #include using namespace std; int N; int arr[1004]; int dp1[1004]; // 증가 부분 dp int dp2[1004]; // 증가하다 감소 부분 dp int result; void calcDp() { for (int i = 0; i < N; i++) { int maxdp1 = 0; int maxdp2 = 0; for (int j = 0; j < i; j++) { if (arr[j] < arr[i]) maxdp1 = max(maxdp1, dp1[j]); ..
-
[C++] BOJ 11053번: 가장 긴 증가하는 부분 수열, 11055번: 가장 큰 증가 부분 수열,. 11722번: 가장 긴 감소하는 부분 수열프로그래밍/알고리즘 PS 2020. 11. 30. 10:24
문제 링크 문제 풀이 해당 문제를 DP(Dynamic Programming) 알고리즘을 이용하여 해결할 수 있다. 11053번, 11722번 : dp[i] = dp[0]부터 dp[i-1]까지의 값 중 최대값 + 1 11055번 : dp[i] = dp[0]부터 dp[i-1]까지의 값 중 최대값 + arr[i] 코드 (11053번) #include using namespace std; int N; int arr[1004]; int dp[1004]; int maxdp; int result; void calcDp() { for (int i = 0; i arr[j]) { maxdp = ma..
-
[C++] BOJ 2156번: 포도주 시식프로그래밍/알고리즘 PS 2020. 11. 27. 11:38
문제 링크 문제 풀이 dp를 이용하여 해당 포도주를 마셨을 때가 연속 1번 마신 경우, 연속 2번 마신 경우, 그리고 해당 포도주를 마시지 않은 경우 3가지로 나누어 문제를 풀어냈다. 코드 #include using namespace std; int n; int arr[10006]; int dp1[10006]; // 1번 마셨을 때 int dp2[10006]; // 2번 마셨을 때 int dp3[10006]; // 안 마셨을 때 int result; void calcDp(int depth) { if (depth > n) return; if (depth == 1) { dp1[1] = arr[1]; dp2[1] = 0; dp3[1] = 0; } else { dp1[depth] = dp3[depth - 1] ..
-
[C++] BOJ 9465번: 스티커프로그래밍/알고리즘 PS 2020. 11. 27. 10:10
문제 링크 문제 풀이 dp를 이용하여 해당 칸의 스티커가 선택되었을 경우의 최고 점수, 선택되지 않았을 때의 최고 점수를 계산하여 문제를 해결하였다. dp1은 상단 부분의 n열 스티커를 고른 경우, dp2는 하단 부분의 n열 스티커를 고른 경우, dp3는 n열의 스티커를 아무것도 고르지 않은 경우의 최고 점수이다. 코드를 보면 max를 많이 사용하였는데 이는 최고 점수를 구하기 위해 비교해야 할 대상이 많았기 때문이다. 코드 #include using namespace std; int T; int n; int stickerScore[100003][3]; int result; int dp1[100003]; // 위에 쪽 선택했을 때 int dp2[100003]; // 아래 쪽 선택했을 때 int dp3[1..