본문 바로가기

ALGORITHM

백준 16139 인간-컴퓨터 상호작용

1. 문제 링크

 

16139번: 인간-컴퓨터 상호작용

첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 누적합을 이용해 길이마다 알파벳 26개의 누적합이 저장된 배열을 만든다.

2. 입력받은 알파벳에서 시작-1과 끝의 값 차이를 출력한다

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		String S = br.readLine();
		int q = Integer.parseInt(br.readLine());
		int[][] alpha = new int[S.length()+1][26];
		
		alpha[0][S.charAt(0)-'a']++;
		for(int i=1;i<S.length();i++) {
			for(int j=0;j<26;j++) {
				alpha[i][j] = alpha[i-1][j];
			}
			alpha[i][S.charAt(i)-'a']++;
		}
		
		for(int i=0;i<q;i++) {
			String[] split = br.readLine().split(" ");
			int a = split[0].charAt(0)-'a';
			int start = Integer.parseInt(split[1]);
			int end = Integer.parseInt(split[2]);
			if(start == 0) {
				sb.append(alpha[end][a]);
			}
			else {
				sb.append(alpha[end][a] - alpha[start-1][a]);
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}	
}