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

kimminjunnn·2025년 5월 30일

알고리즘

목록 보기
65/311

https://www.acmicpc.net/problem/16139


문제 접근

첫쨋줄에 문자열 S를 입력받고
둘쨋줄에 질문 개수 q
셋쨋줄부터 특정 알파벳, 시작인덱스, 끝인덱스 를 공백을 기준으로 입력받아서

해당 특정 알파벳이 시작인덱스부터 끝 인덱스까지에서 몇개 나오는 지 개수를 출력하는 문제.

풀이 및 해답

import sys

S = sys.stdin.readline().rstrip()         # 문자열 S 입력
q = int(sys.stdin.readline())             # 질문 수 q 입력

# 누적합 리스트 생성
# count[i][j] : 문자열의 0~(i-1)번째 문자까지에서 알파벳 j('a'+j)가 나온 횟수
count = [[0] * 26]  # 첫 줄은 0으로 초기화

# 문자열을 순회하면서 누적합 배열 구성
for i in range(len(S)):
    # 직전까지의 누적 상태를 복사해서 새로운 줄로 추가
    count.append(count[-1][:])
    
    # 현재 문자의 알파벳 인덱스를 구해서 +1
    # ord('a') = 97 → 'a' ~ 'z'를 0~25로 매핑
    count[i + 1][ord(S[i]) - 97] += 1

# 각 질문에 대해 처리
for _ in range(q):
    a, l, r = map(str, sys.stdin.readline().split())
    l = int(l)
    r = int(r)

    # 알파벳 a의 인덱스
    ch_idx = ord(a) - 97

    # 누적합으로 개수 계산: count[r+1] - count[l]
    result = count[r + 1][ch_idx] - count[l][ch_idx]
    print(result)
profile
Frontend Engineers

0개의 댓글