파이썬 알고리즘

SWEA 4893 이진탐색 (list1)

뜻 지, 깨달음 오 2022. 9. 20. 15:04

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYJ7KE5qKy8DFASv&contestProbId=AX73CRX6xEADFARO&probBoxId=AYKImykKjWgDFASv&type=USER&problemBoxTitle=list2&problemBoxCnt=5#none 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

사람마다 페이지를 찾는 과정을 한번 거쳐야 했기 때문에, 함수로 답을 구현해보았다.

내가 원하는 페이지를 입력받고, mid를 바꾸는 이진탐색을 하며,

결국 mid가  내가 원하는 페이지일때 몇번시도했는지를 return 해준다.

 

한명의 사람이 게임을 할때마다 처음 페이지와 끝페이지가 리셋되도록, 

함수 안의 while문 바깥에서 start와 end를 초기화해준다.

시도횟수인 cnt도 이때 초기화해준다.

 

while문 안으로 들어가서는 한번 페이지를 펼칠때마다 mid가 바뀌도록 

mid의 수식은 while문 안에 넣어준다.

def findpage(page_i_want):
    start = 1
    end = P
    cnt = 0

    while True:
        mid = (start+end)//2
        if mid==page_i_want:
            cnt+=1
            return cnt

        elif mid>page_i_want:
            cnt+=1
            end = mid
            continue

        elif mid<page_i_want:
            cnt+=1
            start = mid
            continue

목표 페이지= 지금 페이지인 경우,

지금 페이지가 목표 페이지보다 큰 경우,

지금 페이지가 목표 페이지보다 작은 경우의 세가지에 대해 모두 cnt를 1씩 더해주고,

오직 지금 페이지와 목표 페이지가 일치할때만 cnt를 return 해준다.

 

for tc in range(1, T+1):
    P, A, B = map(int, input().split())

    if findpage(A)<findpage(B):
        print(f'#{tc} A')
    elif findpage(A)==findpage(B):
        print(f'#{tc} 0')
    else:
        print(f'#{tc} B')

함수를 두번 실행하면서 결과값을 비교 후, 답을 return한다.

 

 

 

전체코드)

T = int(input())

def findpage(page_i_want):
    start = 1
    end = P
    cnt = 0

    while True:
        mid = (start+end)//2
        if mid==page_i_want:
            cnt+=1
            return cnt

        elif mid>page_i_want:
            cnt+=1
            end = mid
            continue

        elif mid<page_i_want:
            cnt+=1
            start = mid
            continue


for tc in range(1, T+1):
    P, A, B = map(int, input().split())
    
    if findpage(A)<findpage(B):
        print(f'#{tc} A')
    elif findpage(A)==findpage(B):
        print(f'#{tc} 0')
    else:
        print(f'#{tc} B')