알고리즘

[백준, 자바, 16139번] 인간-컴퓨터 상호작용

hminor 2024. 11. 22. 15:57
반응형

풀이

  • 처음 떠오른 방법이 아래 코드와 같은데
  • 왠지 효율상 이게 맞나?라는 의문이 있었지만
  • 우선 빨리 해결해보겠다는 마음으로 시도해본 결과
  • 생각보다 괜찮았는지 해결이 됨
  • 문자의 각 인덱스 별로 a-z까지를 카운팅할 2차원 배열을 만들고
  • 현재 배열에 이전 배열을 모두 복사한 뒤
  • 현재 문자의 인덱스에 1 증가하여 누적 배열을 만들고
  • 그에 따른 구간에 특정 알파벳을 구하여 해결

 

 

import java.io.*;
import java.util.StringTokenizer;

public class _16139 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        String S = br.readLine();
        int q = Integer.parseInt(br.readLine());
        int[][] li = new int[S.length()+1][26];
        for (int i=0; i<S.length(); i++) {
            int idx = (int)S.charAt(i)-97;
            for (int j=0; j<26; j++) li[i+1][j]=li[i][j];
            li[i+1][idx]++;
        }
        while (q>0) {
            st  = new StringTokenizer(br.readLine());
            int idx = st.nextToken().charAt(0)-97;
            int s = Integer.parseInt(st.nextToken());
            int l = Integer.parseInt(st.nextToken());
            bw.write(li[l+1][idx]-li[s][idx]+"\n");
            q--;
        }
        bw.flush();
    }
}