728x90
배경
https://www.acmicpc.net/problem/16139
코드
import sys
input = sys.stdin.readline
name = input().strip()
n = int(input())
arr = [[0 for i in range(26)] for i in range(len(name))]
arr[0][ord(name[0]) - 97] = 1
for i in range(1, len(name)):
arr[i][ord(name[i]) - 97] = 1
for j in range(26):
arr[i][j] += arr[i - 1][j]
for i in range(n):
a = input().split()
if int(a[1]) > 0:
res = arr[int(a[2])][ord(a[0]) - 97] - arr[int(a[1]) - 1][ord(a[0]) - 97]
else:
res = arr[int(a[2])][ord(a[0]) - 97]
print(res)
설명
문제의 조건에 문자열은 알파벳 소문자로만 구성되있다는 것을 볼 수 있다.
ord를 통해서 알파벳 소문자를 아스키 코드 숫자로 구하고 -97 을 하면 0~25 까지가 된다
문제에서 해당 index 값 안에 알파벳이 몇개 있는지 물었으므로 array에 해당 알파벳의 위치를 기록하는 것이다.
i를 index라고 생각하고 name을 순회하면서 해당 알파벳의 위치를 기록하면 된다.
그 뒤 마지막으로 입력받는 값에서 ex) a 6 10 해당 알파벳이 기록 된 위치에 index 두 값을 넣어서 비교해보면 된다.
배운 점