[백준] 19637. IF문 좀 대신 써줘 (Python)

yuuforest·2023년 9월 12일

이진탐색

목록 보기
4/9
post-thumbnail

백준 문제 풀이 - 이진탐색

📰 문제


문제 확인 🏃


💡 입출력 예제


3 8
WEAK 10000
NORMAL 100000
STRONG 1000000
0
9999
10000
10001
50000
100000
500000
1000000

>> WEAK
WEAK
WEAK
NORMAL
NORMAL
NORMAL
STRONG
STRONG
3 5
B 100
A 100
C 1000
99
100
101
500
1000

>> B
B
C
C
C

💬 풀이


🎵 첫번째 풀이 - 시간초과😥

import sys

input = sys.stdin.readline
N, M = map(int, input().split())    # 칭호의 개수 N, 칭호를 출력해야 하는 캐릭터들의 개수 M
awards = []
for _ in range(N):
    name, grade = input().split()
    awards.append((name, int(grade)))


def solution(target):
    
    if target <= awards[0][1]:
        return awards[0][0]
    else:
        for idx in range(1, N):
            if awards[idx-1][1] < target <= awards[idx][1]:
                return awards[idx][0]


for _ in range(M):
    grade = int(input())
    print(solution(grade))

🎵 두번째 풀이 - 이진탐색

import sys

input = sys.stdin.readline
N, M = map(int, input().split())    # 칭호의 개수 N, 칭호를 출력해야 하는 캐릭터들의 개수 M
awards = []
for _ in range(N):
    name, grade = input().split()
    awards.append((name, int(grade)))


def solution(start, end, target):
    answer = 0

    while start <= end:

        mid = (start + end) // 2

        if awards[mid][1] >= target:
            answer = mid
            end = mid - 1
        else:
            start = mid + 1

    return awards[answer][0]


for _ in range(M):
    grade = int(input())
    print(solution(0, N-1, grade))


✒️ 생각


profile
🐥 Backend Developer 🐥

0개의 댓글