Algorithm
백준 19637번 : IF문 좀 대신 써줘
jun_code
2022. 2. 12. 23:46
<문제>
링크 : https://www.acmicpc.net/problem/19637
19637번: IF문 좀 대신 써줘
첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭
www.acmicpc.net
<코드>
import sys
input = sys.stdin.readline
from bisect import bisect_left
N, M = map(int, input().split())
name = []
attack = []
for i in range(N):
n, a = input().split()
name.append(n)
attack.append(int(a))
ch_at = [int(input()) for _ in range(M)]
for i in ch_at:
s = bisect_left(attack, i)
print(name[s])
<풀이>
- 선분의 시작점과 끝점을 주어진 점과 좌표를 비교한다.
- bisect 라이브러리를 사용한다.
- bisect_left(p, a) : 점좌표 리스트 p에서 a의 위치를 index로 리턴받는데 삽입될 위치의 좌측값을 받는다.
- bisect_right(p, a) : 점좌표 리스트 p에서 a의 위치를 index로 리턴받는데 삽입될 위치의 우측값을 받는다.
- 이분 탐색을 위해 bisect 라이브러리 사용
- bisect_left, bisect_right를 통해 주어진 선분 위치에 따라 포함되는 점 개수 계산
참고 : https://github.com/Junuux/Algorithm/tree/main/Silver/19637
GitHub - Junuux/Algorithm
Contribute to Junuux/Algorithm development by creating an account on GitHub.
github.com