본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 16139번 인간-컴퓨터 상호작용

by 현장 2026. 1. 6.

-Code

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

public class BOJ16139 {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

        String line = br.readLine();
        // 일수마다 알파벳의 누적합을 저장
        int len = line.length();
        int[][] alpaCntArr = new int[26][len + 1];

        for (int i = 0; i < len; i++) {
            // 이전에 카운팅된 누적합을 다시 현재 일수로 가져옴
            for (int alpa = 0; alpa < 26; alpa++) {
                alpaCntArr[alpa][i + 1] = alpaCntArr[alpa][i];
            }
            // 현재 알파벳
            char nowChar = line.charAt(i);
            // 해당 순서의 알파벳이 나왔으므로 증가
            alpaCntArr[nowChar - 'a'][i + 1]++;
        }
        // 입력 받기
        int questCnt = Integer.parseInt(br.readLine());
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < questCnt; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            // 찾을 알파벳과 범위 입력
            char findAlpa = st.nextToken().charAt(0);
            int alpaIdx = findAlpa - 'a';
            int left = Integer.parseInt(st.nextToken());
            // left <= cnt <= right 이므로 ringht + 1
            int right = Integer.parseInt(st.nextToken()) + 1;
            answer.append(alpaCntArr[alpaIdx][right] - alpaCntArr[alpaIdx][left])
                            .append("\n");
        }
        System.out.println(answer);
    }
}

처음 만들 때 알파벳 개수를 +1 안 해서 값을 넣는데 문제가 생겼었고 그 이후 범위 내의 개수 합을 구할 때, right가 포함되어야 하는데 안 되는 줄 알고 풀어 틀렸었습니다. 이 부분들을 고쳐서 값은 다 나와서 넣었으나 출력이 많아서 50점이 나와서 StringBuilder를 다시 적용하니 해결되었습니다.