사람마다 페이지를 찾는 과정을 한번 거쳐야 했기 때문에, 함수로 답을 구현해보았다.
내가 원하는 페이지를 입력받고, 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')
'파이썬 알고리즘' 카테고리의 다른 글
SWEA 1979 어디에 단어가 들어갈 수 있을까 파이썬 풀이 (0) | 2022.09.22 |
---|---|
백준 2578 빙고 파이썬 풀이 (4) | 2022.09.22 |
SWEA 전기버스 풀이2: 재귀 활용해서 풀기 (3) | 2022.09.20 |
SWEA 그래비티 풀이2 (0) | 2022.09.20 |
재귀 DFS 문제: 단어 최소 사용 개수 구하기 (0) | 2022.09.18 |