Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 해시구현
- 백준 1158
- 1764
- 해시 구현
- 자료구조
- Stack 이란
- 백준 2447
- 백준 17822
- 버킷 정렬
- ㅣ풀이
- 원판 돌리기
- 게리멘더링2
- dfs
- qorwns
- 스택의 특징
- 풀이
- 백준 5397
- heap
- 백준 17779
- c#
- AVL 시간 복잡도
- C/C++ 구현
- 백준 17471
- 조세퍼스 순열
- 시간 복잡도
- 5397
- 구현
- 별 찍기 10
- 백준 1406
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 3020] 개똥벌레 본문
https://www.acmicpc.net/problem/3020
3020번: 개똥벌레
문제 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 번갈아가면서 등장한다. 아래 그림은 길이가 14미터이고 높이가 5미터인 동굴이다. (예제 그림) 이 개똥벌레는 장애물을 피하지 않는다. 자신이 지나갈 구간을 정한 다음 일직선으로 지나가면서 만나는 모든 장애물을 파괴한다. 위의 그림에서 4번째 구간으로 개똥벌레
www.acmicpc.net
요구사항
최소로 기둥을 부수는 높이 h와 이러한 높이의 개수 찾기
풀이
prefix sum이라는 개념을 활용하여
현재 높이의 기둥 부수는 수 = 현재 높이 기둥 + (현재 높이+1 기둥 들의 합)
을 이용하여 풀었다.
#include <iostream>
using namespace std;
int top[500002];
int bot[500002];
int topA[500002];
int botA[500002];
int main() {
int n, h;
cin >> n >> h;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
if (i % 2 == 0)
top[x]++;
else
bot[x]++;
}
for (int i = h; i >= 1; i--) {
topA[i] = top[i] + topA[i + 1];
botA[i] = bot[i] + botA[i + 1];
}
int ans = 987654321;
int cnt = 0;
for (int i = 1; i <=h ; i++) {
int now = topA[i] + botA[h - i+1];
if (ans > now) {
ans = now;
cnt = 1;
}
else if (ans == now) {
cnt++;
}
}
cout << ans << " " << cnt << endl;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 17822] 원판 돌리기 (0) | 2020.01.30 |
---|---|
[백준 13460] 구슬 탈출2 (0) | 2020.01.29 |
[백준 2959] 거북이 (0) | 2020.01.14 |
[백준 4195] 친구 네트워크 (0) | 2020.01.14 |
[백준 5052] 전화번호 목록(20200514 수정) (0) | 2020.01.14 |
Comments