Koala - 14기/코딩테스트 준비 스터디

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

sebinChu 2024. 4. 7. 20:03

문제

 

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


Algorithm

처음엔 딕셔너리로 정의했는데 key, value로 변환하기 까다로웠다.

이러한 케이스는 다음과 같이 각각의 두 개의 리스트를 정의 → 인덱스 쌍으로 찾을 수 있다는 점을 알게되었다.

# 칭호 정보 저장 | name_arr, val_arr은 같은 인덱스로 값을 찾을 수 있다.
for _ in range(n):
    name,value=input().split()
    name_arr.append(name)
    val_arr.append(int(value))

# ... 생략
# val_arr로부터 원하는 값을 찾는다.
if target <= val_arr[mid]:
	ans=mid
	right=mid-1
else:
	left=mid+1
	
# 해당 인덱스의 name_arr을 찾는다.    
print(name_arr[ans])


 

Code

import sys; input=sys.stdin.readline

n,m=map(int,input().split())
name_arr=[]
val_arr=[]

# 칭호 정보 저장 | name_arr, val_arr은 같은 인덱스로 값을 찾을 수 있다.
for _ in range(n):
    name,value=input().split()
    name_arr.append(name)
    val_arr.append(int(value))

for _ in range(m):
    target=int(input())
    ans=0

    left, right = 0, len(name_arr)-1
    while left <= right:
        mid = (left+right)//2
        
        if target <= val_arr[mid]:
            ans=mid
            right=mid-1
        else:
            left=mid+1
    
    print(name_arr[ans])