열렬히.뛰기

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

알고리즘: 실전 > 백준 단계별로 풀기: 10번 ~ 25번 > 16139: 인간-컴퓨터 상호작용

코드 (1차 - 50점)

python
"""인간 컴퓨터 상호작용"""
import sys
input = sys.stdin.readline

S = input() # 문자열 
q = int(input()) # 문제의 수
for _ in range(q):
    alpha, l, r = map(str, input().split())
    l, r = int(l), int(r)
    cnt = [0] * len(S)
    for i in range(r+1):
        if S[i] == alpha:
            cnt[i] = cnt[i-1] + 1
        else: cnt[i] = cnt[i-1]
    
    print(cnt[r] - cnt[l-1])

코드 (2차- 100점)

python
"""인간 컴퓨터 상호작용"""
import sys
input = sys.stdin.readline

S = list(input().rstrip()) # 문자열
arr = [[0 for i in range(26)] for _ in range(len(S))]

arr[0][ord(S[0]) - 97] = 1
for i in range(1, len(S)):
    arr[i][ord(S[i]) - 97] = 1
    for j in range(26):
        arr[i][j] += arr[i-1][j]

q = int(input()) # 문제의 수
for _ in range(q):
    alpha, l, r = input().split()
    alpha = ord(alpha) - 97
    l, r = int(l), int(r)
    if l == 0:
        print(arr[r][alpha])
    else:
        print(arr[r][alpha] - arr[l-1][alpha])
  • 하단과 같이 만들어야 함
ex. seung
['s', 'e', 'u', 'n', 'g']
				[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
's'일때 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
'e'일때 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
'u'일때 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]
'n'일때 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]
'g'일때 [0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0]

a 2 4 이다 하면
4번째 = 'g' => 'g'일때 a는 0번
2-1번째 = 's' => 's'일때 a는 0번
즉 0번이 출력.