카테고리 없음

백준 | [파이썬 Python] 16139 인간-컴퓨터 상호작용

두잇 두두 2024. 5. 9. 22:21
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 두 값을 넣어서 비교해보면 된다.

 

 

배운 점