카테고리 없음

[백준][python]1756 피자굽기

soduddl1 2023. 4. 16. 14:24

문제

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

소스코드1 

if __name__ == "__main__":
    d,n = map(int,input().split())
    oven = list(map(int,input().split()))
    banjuck = list(map(int,input().split()))

    for i in range(1,d):
        oven[i] = min(oven[i-1],oven[i])
    
    cur = 0
    idx = 0
    for i in range(d-1,0,-1):
        if oven[i] < banjuck[cur]: #반죽이 더 크면 오븐에 못넣으니까 패스
            continue
        cur +=1 # 오븐에 반죽 넣으면 반죽 갯수 체크

        if cur >= n : # 주어진 반죽 모두 오븐에 넣은 경우
            idx = i+1 # i =0 부터 해서 +1 처리 해주기
            break
    print(idx)

 

소스코드2

    l = 0
    r = d-1
    for i in range(1,d):
        oven[i] = min(oven[i-1],oven[i])

    for b in banjuck: # 모든 반죽에 대해서 체크
    	idx = -1 # 반죽 체크 확인
        while l <= r:
            mid = (l+r) // 2
            if oven[mid] >= b: # 오븐이 반죽보다 크다 넣을 수는 있지만 더 작은 구간을 체크해보자 (위쪽)
                l = mid + 1
                idx = mid # 반죽 위치 체크 
            else: # 오븐이 반죽보다 작다 넣을 수도 없다 큰 구간을 체크하자
                r = mid - 1

        if idx == -1: #오븐에 반죽을 놓지 못한 경우
            break # 더이상 체크하지 않고 끝
            
        l = 0
        r = idx -1 

    print(0 if idx == -1 else idx+1)

후기

이분탐색 풀이 메모리 / 시간

 

for문 탐색 풀이 메모리 / 시간 : 시간이 훨씬 적다..