728x90
SMALL
백준 문제 풀이: 32642 [당구 좀 치자 제발]
문제 링크: https://www.acmicpc.net/problem/32642
문제 설명:
동우는 당구를 치고 싶지만, 수호는 비가 오면 집 밖에 나가지 않습니다. 그래서 비 오는 날엔 동우는 당구를 칠 수 없어 분노가 쌓입니다. 분노는 비 오는 날에 1 증가하고, 비가 오지 않으면 1 감소합니다. 단, 분노는 음수가 될 수 없으며 항상 0 이상입니다.
당신은 N일 동안의 비 정보를 보고, 동우가 겪게 될 분노 수치를 1일부터 N일까지 누적하여 더한 값을 출력해야 합니다.
문제 해결 코드
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
long long int ans = 0;
int k = 0;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
if (x == 0) {
k = (k > 0) ? k - 1 : 0; // 분노 감소 (음수 방지)
} else {
k++; // 분노 증가
}
ans += k; // 누적 분노 합계
}
printf("%lld", ans);
return 0;
}
코드 설명
- 핵심 알고리즘: 시뮬레이션. 매일 비가 오는지 안 오는지를 확인하여 분노 수치를 조절하고 누적합을 구합니다.
- 구현 세부사항:
- 비가 오는 날은
x == 1
일 때 분노 수치 k를 1 증가시킵니다. - 비가 오지 않는 날은
x == 0
일 때 분노 수치 k를 1 감소시키되, 0 미만으로 내려가지 않게 합니다. - 매일의 분노 수치 k를 누적하여
ans
에 더합니다.
- 비가 오는 날은
- 시간 복잡도 분석: O(n) — 입력을 한 번 순회하면서 처리하기 때문에 효율적입니다.
결과
예시 입력:
입력:
8
1 1 0 1 0 0 1 0
출력:
8
분노 수치의 변화: 1 → 2 → 1 → 2 → 1 → 0 → 1 → 0 → 합계 = 8
동우의 누적 분노 합을 잘 구해 화병을 예방해 줍시다!
다른 아이디어나 최적화 방식이 있다면 댓글로 남겨주세요 :)
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 32651번 [인간은 무엇인가](C++) -yes6686- 티스토리 (0) | 2025.04.03 |
---|---|
백준 32684번 [장기](C++) -yes6686- 티스토리 (0) | 2025.04.02 |
백준 33612번 [피갤컵](C++) -yes6686- 티스토리 (0) | 2025.03.29 |
백준 11023번 [더하기 3](C++) -yes6686- 티스토리 (0) | 2025.03.27 |
백준 11134번 [쿠키애호가](C++) -yes6686- 티스토리 (0) | 2025.03.26 |