#include int main(void) { int n; scanf("%d", &n); int one = 0, two = 0, max = 0, tmp; while(n--) { scanf("%d", &tmp); if(tmp == 1) { one++; two--; if(one max) max = one; } else { two++; one--; if(two max) max = two; } } printf("%d", max); } 풀이 : dynamic programming 왼쪽은 1, 오른쪽은 2로 볼 때 one은 (왼쪽을 바라보는 금색 돌상의 개수) - (오른쪽을 바라보는 금색 돌상의 개수)이며 two은 (오른쪽을 바라보는..

#include #define M 1000000009 int main(void) { int t, i, n, ans, dp[100001][3] = {}; scanf("%d", &t); //testcase 입력 //1부터 3까지 만드는 것은 기본적으로 넣습니다. dp[1][0] = 1; dp[2][1] = 1; dp[3][0] = 1; dp[3][1] = 1; dp[3][2] = 1; //4이상 부터는 dynamic programming으로 얻어낼 수 있습니다. for(i=4; i
#include int arr[2001] = {}; //정수의 배열 char ans[2001][2001] = {}; //팰린드롬인지 아닌지를 담는 배열 맞으면 2, 아니면 1 int loop(int s, int e) { //팰린드롬 구하는 재귀함수 if(s==e) ans[s][e] = 2; //하나일 경우는 반드시 팰린드롬 if(ans[s][e]) return ans[s][e]; //이미 팰린드롬인지 아닌지를 dp로 저장했다면 바로 리턴 if(arr[s] != arr[e]) { //양 끝의 요소가 다르면 팰린드롬이 아니므로 ans[s][e] = 1; return 1; //1 리턴 } else { //같다면 if(s+1

#include int dp[16] = {}; int main(void) { int n=0; scanf("%d", &n); for(int i=0; i0) if(dp[i] n) continue; //퇴직날을 초과 하면, 상담이 불가하므로, 스킵한다. if(dp[i+t] < dp[i]+p) dp[i+t] = dp[i]+p; //걸린 시간 + 상담 한 시간 에서 얻는 돈이 지금 경우가 더 클 경우 바꾸어 준다. } printf("%d", dp[n]); } 풀이 : d..
- Total
- Today
- Yesterday
- 최대공약수
- 세그먼트 트리
- 1835
- 백준
- 누적합
- 누적 합
- 스택
- BFS
- C++
- XOR
- C언어
- 브루트포스
- PASCAL
- 그래프
- union
- DFS
- DP
- java
- Krustal
- 정렬
- 플로이드
- 오프라인 쿼리
- 그리디
- Lazy Propagation
- Segment Tree
- 1835번
- 기하학
- 최소 스패닝 트리
- 덱
- find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |