#include int main(void) { int n; scanf("%d", &n); int a[96002] = {}; while(n--) { int y1, y2, m1, m2; scanf("%d-%d %d-%d", &y1, &m1, &y2, &m2); y1 -= 2000; y2 -= 2000; m1--; m2--; a[y1*12+m1]++; a[y2*12+m2+1]--; } int max = a[0], p = 0; for(int i=1; i
#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 int main(void) { int n, h, tmp; scanf("%d %d",&n, &h); int odd[500001]={}, even[500001]={}; //석순 : odd, 종유석 : even for(int i=1; i0; i--) { //누적합 (더 큰것의 개수를 덜 큰것의 개수에 더해줌) odd[i] += odd[i+1]; //석순 even[i] += even[i+1]; //종유석 } int min = 1e9, cnt = 0; //최솟값과 이때의 개수 for(int i=1; i tmp) { // 더 작다면? min = tmp; cnt = 1; } else if(min == tmp) cnt++; //같다면? } printf("%d %d", min, cnt); //출력 } 풀..
- Total
- Today
- Yesterday
- 누적합
- 최소 스패닝 트리
- DP
- Krustal
- Lazy Propagation
- 누적 합
- 1835번
- Segment Tree
- 스택
- 최대공약수
- 브루트포스
- DFS
- C++
- BFS
- PASCAL
- 덱
- union
- 세그먼트 트리
- 기하학
- C언어
- 1835
- 그래프
- XOR
- 백준
- 플로이드
- java
- 그리디
- 정렬
- 오프라인 쿼리
- 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 |