프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 19637 IF문 좀 대신 써줘

중규리 2024. 1. 20. 10:35

🐸 문제 정보

 

19637번: IF문 좀 대신 써줘

첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭

www.acmicpc.net

 

🤖 알고리즘

이진탐색

 

⏱️ 풀이 시간

16.22m

 

📝 풀이

이진탐색 문제였다.

칭호의 이름과 상한점을 리스트에 넣은 후,

start는 0부터, end는 n - 1부터 시작해서 이진탐색을 진행하면 된다.

문제에 이미 비내림차순(==오름차순)으로 정렬되어 입력된다고 적혀있기 때문에, 칭호에 대해서 정렬을 하지 않아도 된다. 마찬가지로 end 역시 입력으로 주어지기에 len으로 길이를 구할 필요 없다.

다른 사람들의 풀이를 보면서 왜 전부 정렬을 한 번 더 하는지 모르겠다 느꼈ㄷㅏ...

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

n, m = list(map(int, input().rstrip().split()))
emblem = [list(input().rstrip().split()) for _ in range(n)]

def binary(score):
    start = 0
    end = n - 1
    while start <= end:
        mid = (start + end) // 2
        if int(emblem[mid][1]) < score:
            start = mid + 1
        else:
            end = mid - 1
    return emblem[start][0]

for _ in range(m):
    print(binary(int(input().rstrip())))

'PS > 문제풀이' 카테고리의 다른 글

백준 12919 A와 B 2 Python  (0) 2024.01.20
백준 1927 최소 힙 Python  (0) 2024.01.20
백준 1205 등수 구하기 Python  (0) 2024.01.20
백준 13549 숨바꼭질 3  (0) 2024.01.17
백준 1446 지름길 Python  (0) 2024.01.17