티스토리 뷰

#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

 

25427번: DKSH를 찾아라

준혁이는 DKSH(단국대학교부속소프트웨어고등학교)에 다니는 학생이다. 어느 날, 준혁이는 길을 걷다가 $N$ 개의 알파벳 대문자가 써있는 종이를 발견했다. 평소에 자신이 DKSH에 다니는 학생이라

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함