문제
https://www.acmicpc.net/problem/1620
걸린 시간
01 : 46 : 00
풀이
Python3
import sys
input = sys.stdin.readline
def binsearch(tmp, category):
left = 0
right = len(category)-1
while left <= right:
mid = (left + right) // 2
if tmp > category[mid][0]:
result = category[mid][1]
left = mid + 1
elif tmp < category[mid][0]:
result = category[mid][1]
right = mid - 1
else:
result = category[mid][1]
break
return result
if __name__ == "__main__":
N, M = map(int, input().split())
dic = {chr(i):(i-0x41) for i in range(0x41, 0x5a+1)}
word = [[] for _ in range(0, 26)]
num = []
for i in range(0, N):
tmp = input().strip()
word[dic.get(tmp[0], '-1')].append([tmp, i+1])
num.append([tmp, i+1])
for i in range(0, 26):
word[i].sort()
result = []
for i in range(0, M):
tmp = input().strip()
if dic.get(tmp[0], -1) != -1:
category = word[int(dic.get(tmp[0], -1))]
result.append(binsearch(tmp, category))
else:
result.append(num[int(tmp)-1][0])
for i in result:
print(i)
도감에 수록되어 있는 포켓몬 이름의 첫글자가 영어 대문자인걸로 보아, 시작하는 알파벳 순으로 분류하라는 힌트임을 알 수 있다. word
포켓몬의 이름을 입력받아 포켓몬의 번호를 찾기 위해서는 번호를 기준으로 정렬된 목록이 필요하다. num
이분 탐색은 문자열 검색에도 사용할 수 있다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 1764번 듣보잡 (0) | 2020.08.02 |
---|---|
Baekjoon 1068번 트리 (0) | 2020.08.01 |
Baekjoon 15829번 Hashing (0) | 2020.07.26 |
Baekjoon 2869번 달팽이는 올라가고 싶다 (0) | 2020.07.26 |
Baekjoon 2775번 부녀회장이 될테야 (0) | 2020.07.26 |
댓글