티스토리 뷰
#include <stdio.h>
int main(void)
{
long long n, d=0, dk=0, dks=0, dksh=0;
scanf("%lld", &n);
char arr[n+1];
scanf("%s", arr);
for(int i=0; i<n; i++) {
if(arr[i] == 'D') d++;
else if(arr[i] == 'K') dk+=d;
else if(arr[i] == 'S') dks += dk;
else if(arr[i] == 'H') dksh += dks;
}
printf("%lld", dksh);
}
풀이 : 누적 합
D, K, S, H 을 봅시다.
D가 나올때 마다 d을 증가시켜주다가
K가 나오게 되면 만들수 있는 DK의 개수는 d와 같습니다.
S가 나오게 되면 만들수 있는 DKS의 개수는 dk와 같습니다.
H가 나오게 되면 만들수 있는 DKSH의 개수는 dks와 같습니다.
이를 이용해서, D, K, S, H가 나올 때마다 이와 관련된 변수들의 값을 변경해주면 됩니다.
마지막으로 DKSH의 개수인 dksh을 출력합니다.
https://www.acmicpc.net/problem/25427
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 28070번 유니의 편지 쓰기 (백준) (0) | 2023.08.15 |
---|---|
c언어 25634번 전구 상태 뒤집기 (백준) (0) | 2023.08.15 |
c언어 5549번 행성탐사 (백준) (0) | 2023.08.14 |
c언어 20159번 동작 그만. 밑장 빼기냐? (백준) (0) | 2023.08.14 |
c언어 27210번 신을 모시는 사당 (백준) (0) | 2023.08.14 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카드
- 16120번
- C++
- java
- 세그먼트 트리
- 그리디
- 6198번
- 오프라인 쿼리
- union
- DFS
- Krustal
- 트리
- find
- 1835
- 1835번
- 6198
- 덱
- 플로이드
- 그래프
- 최대공약수
- 누적 합
- 최소 스패닝 트리
- 누적합
- 백준
- C언어
- DP
- Mo.s
- 정렬
- 스택
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함