티스토리 뷰
https://www.acmicpc.net/problem/16139
16139번: 인간-컴퓨터 상호작용
첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째
www.acmicpc.net
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr[200001]; //문자열을 담을 배열
scanf("%s", arr); //문자열 입력
int len = strlen(arr); //입력받은 문자열의 길이
int a[27][len]; //알파벳은 26개다. 2차원 배열 선언
for(int i = 0; i<len; i++) //문자열에 무슨 알파벳이 있는지, 한칸 한칸 이동하면서 구하기
{
for(int j = 0; j<27; j++) a[j][i] = 0; // 이차원 배열 a의 모든값을 0으로 초기화
int tmp = arr[i]-97; //a ASCII : 97(d) //특정 문자가 있으면
a[tmp][i]++; //a[특정문자][그 때의 문자열의 길이]을 1 증가 시킨다.
}
for(int i = 1; i<len; i++) //이차원 배열 a의 알파벳에 따른 부분합들 구하기
{
for(int j = 0; j<26; j++) //a~z
{
a[j][i] += a[j][i-1];
}
}
int q = 0;
scanf("%d", &q); //몇 번?
while(q>0)
{
char ch = 0; //무슨 문자?
int x, y; //범위
scanf(" %c%d%d", &ch, &x, &y); //입력받음
if(x == 0) printf("%d\n", a[ch-97][y]); //x가 0이면 y의 부분합만 출력하면 됨
else printf("%d\n", a[ch-97][y]-a[ch-97][x-1]); //부분합끼리 빼면, 범위 내 합을 알 수 있음
q--;
}
return 0; //main 함수 종료
}
- 풀이
1) 변수 선언
문자열을 담을 배열 (char arr[200001]) 을 선언하고 입력받고, 입력받은 문자열의 길이를 구하고, 알파벳과 몇번 째의 부분합을 담기 위한 이차원 배열도 선언한다.
2) 어디에 무슨 알파벳이 있는지 구하기
for을 이용하여, 먼저 부분합을 담기위한 이차원 배열을 0으로 초기화하면서, 길이을 1씩 증가시키면서, 거기서의 알파벳의 이차원 배열의 값을 1로 바꾼다.
3) 알파벳들의 길이에 따른 부분합 구하기
for을 이용하여, 각각 알파벳들마다, 길이에 따른 부분합을 구한다.
4) 몇 번 답변 할지를 입력받는다.
5) 알파벳과, 범위를 입력받고, 그에 대한 부분합을 출력한다!
'c언어 > BAEKJOON' 카테고리의 다른 글
| c언어 1011번 Fly me to the Alpha Centauri (백준) (0) | 2022.05.17 |
|---|---|
| c언어 10816번 숫자카드 (2) (백준) (0) | 2022.05.11 |
| c언어 11659번 구간 합 구하기 4 (백준) (0) | 2022.05.08 |
| c언어 2609번 최대공약수와 최소공배수 (백준) (0) | 2022.05.07 |
| c언어 11722번 가장 긴 감소하는 부분 수열 (백준) (0) | 2022.05.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++
- 브루트포스
- C언어
- find
- DP
- 그리디
- 구현
- 오프라인 쿼리
- 스택
- 그래프
- 정렬
- 백준
- 누적합
- Segment Tree
- java
- 세그먼트 트리
- 누적 합
- XOR
- 덱
- 문자열
- DFS
- union
- 1835
- Krustal
- 1835번
- PASCAL
- Lazy Propagation
- 최소 스패닝 트리
- 기하학
- 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 |
글 보관함
