b_IF문대신_19637

source www.acmicpc.net/problem/19637
type 📌 개발노트
topics 600-알고리즘 & 코딩테스트 610 이진탐색
types 문제풀이
정답여부 시간초과

문제

전투력 기준으로 칭호를 붙여줄라고함

if power <= 10000
 print WEAK
else if power <= 100000
 print NORMAL
else if power <= 1000000
 print STRONG

칭호개수, 캐릭터개수
칭호와 전투력

겁나쉽잖아? >> 바로시간초과 ㅅㄱ
이분탐색써서했음

import sys
from collections import deque
n, m = map(int,sys.stdin.readline().strip().split())
name = []
name_dic = {}
tmp_cnt =0
for j in range(n):
    tmp = sys.stdin.readline().strip().split()
    if j-tmp_cnt>0:
        if name[j-tmp_cnt-1][1]==int(tmp[1]):
            tmp_cnt+=1
            continue
    name.append([tmp[0],int(tmp[1])])
    name_dic[tmp[1]] = tmp[0]
# <span id="printname"></span>print(name)
ans = ""
def search(start,end,v):
    mid = (start + end)//2
    # print(start,end,mid,v)
    if start>end:
        return name[start][0]
    mid_v = name[mid][1]
    if mid_v == v:
        return name[mid][0]
    elif mid_v < v:
        return search(mid+1,end,v)
    return  search(start,mid-1,v)
for _ in range(m):
    tmp = int(sys.stdin.readline().strip())
    c=""
    start = 0
    end = len(name)-1
    if tmp in name_dic:
        c= name_dic[tmp]
    else:
        c = search(0,len(name)-1,tmp)
    # print('------'+c+'------')
    ans += (c+'\n')
print(ans)