본문 바로가기
PS/백준

백준 16139번: 인간-컴퓨터 상호작용 python 파이썬

by 지기_ 2021. 8. 6.
반응형

1. 문제

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

 

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

첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째

www.acmicpc.net

 

2. 풀이

시간초과 나면 print를  sys.stdout.write()로 바꾸기

 

3. 구현

 

50점:

import sys
# sys.stdin=open('input.txt')

s = sys.stdin.readline()
n = int(sys.stdin.readline())

lis=[]
for c in 'abcdefghijklmnopqrstuvwxyz':
    cnt=0
    tmp=[]
    for item in str(s):
        if item==c:
            cnt+=1
        tmp.append(cnt)
    lis.append(tmp)

while n:
    n-=1
    tmp = sys.stdin.readline().split()
    c, start, end = tmp[0], int(tmp[1]), int(tmp[2])
    tmp_lis = lis[ord(tmp[0])-97]
    answer=tmp_lis[end]-tmp_lis[start]
    if s[start]==c:
        answer+=1
    print(answer)

 

100점:

import sys
#sys.stdin=open('input.txt')

s = sys.stdin.readline()
n = int(sys.stdin.readline())

lis=[]

# @profile
def prep():
    for c in 'abcdefghijklmnopqrstuvwxyz':
        cnt=0
        tmp=[]
        for item in str(s):
            if item==c:
                cnt+=1
            tmp.append(cnt)
        lis.append(tmp)

# @profile
def main():
    global n
    while n:
        n-=1
        tmp = sys.stdin.readline().split()
        c, start, end = tmp[0], int(tmp[1]), int(tmp[2])
        tmp_lis = lis[ord(tmp[0])-97]
        answer=tmp_lis[end]-tmp_lis[start]
        if s[start]==c:
            answer+=1
        sys.stdout.write(str(answer)+'\n')
        # print(answer)
if __name__ == "__main__":
    prep()
    main()
반응형

댓글