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)