[python] 백준 19637번 IF문 좀 대신 써줘

Youngseo Lee·2024년 8월 7일

이진탐색

목록 보기
2/5

백준 19637번 IF문 좀 대신 써줘

https://www.acmicpc.net/problem/19637

문제

풀이

보자보자 ,,,
이 문제를 보면 일단 숫자가 크다.
숫자가 크면 이진탐색을 의심한다.
나동빈님의 유튜브에서 본 게 나왔다, bisect.
x가 들어갈 수 있는 가장 왼쪽 인덱스를 통해서 전투력을 프린트해주면 되겠다!

import sys
input = sys.stdin.readline
from bisect import bisect_left

n, m = map(int, input().split()) # 칭호의 개수, 캐릭터의 개수

strength_str= []
strength_int = []
for i in range(n):
    sstr, sint = input().split()
    strength_str.append(sstr)
    strength_int.append(int(sint))

character = []
for _ in range(m):
    character.append(int(input().strip()))

for i in character:
    position = bisect_left(strength_int, i)
    print(strength_str[position])

📌 주의

  • 처음에는 그냥 [[weak, 10000],[normal, 100000]]이런 식으로 저장하다가 int, str 도 복잡하고 끝에가서 출력할 때도 복잡해져서 그냥 마음 편하게 리스트 두 개 (strength_str, strength_int)로 나눠버렸다.
  • bisect를 쓸 때, position = bisect_left(리스트, 넣을 숫자) 순서를 지켜야 한다. 이거 때문에 오류났는데 계속 못찾고 있었다는 슬픈 사실. 순서 맞게 넣어주면 숫자가 들어갈 수 있는 가장 왼쪽 인덱스를 던져줄 것이니~
profile
leenthepotato

0개의 댓글