티스토리 뷰
#include <stdio.h>
int main(void)
{
int n, h, tmp;
scanf("%d %d",&n, &h);
int odd[500001]={}, even[500001]={}; //석순 : odd, 종유석 : even
for(int i=1; i<=n; i++) //석순 또는 종유석의 크기 입력
{
scanf("%d", &tmp);
if(i&1) odd[tmp]++; //홀수번
else even[tmp]++; //짝수번
}
for(int i=h-2; i>0; i--) { //누적합 (더 큰것의 개수를 덜 큰것의 개수에 더해줌)
odd[i] += odd[i+1]; //석순
even[i] += even[i+1]; //종유석
}
int min = 1e9, cnt = 0; //최솟값과 이때의 개수
for(int i=1; i<=h; i++) {
tmp = odd[i] + even[h-i+1];
if(min > tmp) { // 더 작다면?
min = tmp;
cnt = 1;
} else if(min == tmp) cnt++; //같다면?
}
printf("%d %d", min, cnt); //출력
}
풀이 : 누적합
1. 석순과 종유석을 담을 배열들을 만듭니다.
2. 홀수번엔 석순의 값을, 짝수번엔 종유석의 값을 길이에 맡게 증가시켜줍니다.
3. 각각의 석순과 종유석의 누적합을 구합니다.
EX) 석순의 높이가 2인 것이 두개있다는 의미는 석순의 높이가 1인 것이 2개 이상이라는 의미가 됩니다. 즉 긴 것에서 작은것에 값을 누적 시켜줍니다.
4. 최솟값과 이때의 개수를 for문을 이용하여 구해줍니다.
https://www.acmicpc.net/problem/3020
3020번: 개똥벌레
개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이
www.acmicpc.net
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 20159번 동작 그만. 밑장 빼기냐? (백준) (0) | 2023.08.14 |
---|---|
c언어 27210번 신을 모시는 사당 (백준) (0) | 2023.08.14 |
c언어 17123번 배열 놀이 (백준) (0) | 2023.08.01 |
c언어 16713번 Generic Queries (백준) (0) | 2023.07.30 |
c언어 26007번 Codepowers (백준) (0) | 2023.07.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- C언어
- 누적합
- DP
- 플로이드
- union
- 1835
- PASCAL
- 덱
- find
- C++
- 세그먼트 트리
- 1835번
- 그래프
- 정렬
- DFS
- 기하학
- 오프라인 쿼리
- 최소 스패닝 트리
- 브루트포스
- 백준
- BFS
- Lazy Propagation
- 누적 합
- 그리디
- 스택
- 최대공약수
- Segment Tree
- Krustal
- XOR
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함