def 안에 while 문 사용 시 변수 문제
902
작성한 질문수 3
import sys
#sys.stdin=open("input.txt", "rt")
a, b = map(int,input().split())
Line = []
for i in range(a):
tmp = int(input())
Line.append(tmp)
lt = 1
rt = max(Line)
def binary_search(x, y, z):
global res
while x<=y :
sum = 0
mid = (x+y)//2
for i in Line :
sum += i//mid
if sum >= b :
res = mid
return binary_search(mid+1,y,z)
else :
return binary_search(x,mid-1,z)
return res
print(binary_search(lt,rt, b))
다음과 같은 코드입니다.
답은 맞혔으나 개인적인 궁금함으로 질문합니다.
def 문 안에 global res라고 선언을 안하고
단순히 res = 0이라고 선언을 했을 때
제 생각하에 while문이 돌면 res=mid으로 새롭게 저장이 되고
return res 하면 저장한 mid값이 나와야할거같은데
변수 선언할 때 사용한 0 값이 나옵니다 ㅠㅠㅠ
def 안에서 변수를 선언하면 다 적용되는거 아니였나요?
궁금해서 질문해봅니다...
global res라고 하니까 문제는 해결 됐는데, 변수 함부로 전역 변수로 선언하기 싫어서 이렇게 질문드립니다 ㅠㅠ
답변 1
0
안녕하세요^^
문제에 있은 입력예제를 가지고 설명하면
최초에 호출된 재귀함수 binary_search(1, 802, 11)은 맨 마지막 재귀함수인 binary_search(201, 200, 11)가 리턴한 값을 받는 겁니다.
즉 binary_search(1, 802, 11)는 binary_search(1, 400, 11)이 리턴한 값을 받고,
binary_search(1, 400, 11)은 binary_search(201, 400, 11)이 리턴한 값을 받고,
.
.
.
binary_search(201, 202, 11)는 binary_search(201, 200, 11)이 리턴한 값을 받습니다.
최종적으로 거꾸로 전달받아 올라가면 binary_search(1, 802, 11)는 binary_search(201, 200, 11)가 리턴한 값을 받는 겁니다.
문제에 있는 예제입력으로 아래코드에 실행시켜보세요.
import sys
sys.stdin=open("input.txt", "rt")
a, b = map(int,input().split())
Line = []
for i in range(a):
tmp = int(input())
Line.append(tmp)
lt = 1
cnt=0
rt = max(Line)
def binary_search(x, y, z):
global cnt
cnt+=1
res=cnt
print(x, y, z, res)
while x<=y :
sum = 0
mid = (x+y)//2
for i in Line :
sum += i//mid
if sum >= b :
res = mid
return binary_search(mid+1,y,z)
else :
return binary_search(x,mid-1,z)
return res
print(binary_search(lt,rt, b))
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
0
76
2
스택에서 ')'을 만나는 경우
0
77
3
문제가 어디있나요?
0
63
2
변수 or 함수명
0
60
1
침몰하는 타이타닉 문제 질문입니다
0
53
1
AA.py 책점 에러
0
57
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
108
1
아나그램 비교 코드
0
115
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
159
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
162
2
동적계획법은 사용하는 문제
0
124
2
제 코드 좀 봐주세요
0
147
1
예외가 존재할 가능성?
0
96
1
3번이 안풀립니다
0
92
0
5번 틀림
0
112
0
오류원인?
0
97
0
리스트 선언
0
106
1
침몰하는 타이타닉(그리디) 문제 질문
0
109
1
알고리즘
0
65
1
코딩테스트
0
88
1
DFS 순서 질문드립니다.
0
120
2
left, right를 사용한 풀이법에 대한 질문입니다
0
88
1





