binary search

오렌지맛귤·2023년 9월 20일

TIL(Today I Learned !!)

목록 보기
3/5

1. 배터리

battery = "######____" 60%

battery = "#######___" 70%

battery = input()
start = 0
end = 9
MAX = -1

while True:
    mid = (start+end)//2
    if battery[mid] == '_':
        end = mid-1
    elif battery[mid] == '#':
        MAX = mid
        start = mid+1
    if start > end:
        break

print(MAX)

'#'을 찾는 것 + 가장 끝에 있는 '#'을 찾는 것!
가장 끝에 있는 ? -> 가장 인덱스가 큰 ... MAX 서치

2. 응용 - 2차원 배열

# 6*10

cloud=[
    "##########",
    "##########",
    "###_______",
    "__________",
    "__________",
    "__________",
]

n = int(input())    # n*n

cloud = [list(input()) for _ in range(n)]

def searchy(st, ed):
    y = -1
    while 1:
        md = (st + ed) // 2

        if cloud[md][0] == '0':
            ed = md-1
        elif cloud[md][0] == '#':
            y = md
            st = md+1
        if st>ed: break
    return y

def search(st, ed, y):
    x = -1
    while 1:
        md = (st + ed) // 2

        if cloud[y][md] == '0':
            ed = md-1
        elif cloud[y][md] == '#':
            x = md
            st = md+1
        if st>ed: break
    return x

yy = searchy(0, 7)
xx = search(0, 7, yy)
print(yy, xx)
profile
조수훈입니다.

0개의 댓글