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