237. 이진 검색 트리
1) 어떤 전략(알고리즘)으로 해결?
2) 코딩 설명
<내 풀이>
import sys
sys.setrecursionlimit(10**5)
lis = []
while True :
try :
num = int(sys.stdin.readline().strip())
lis.append(num)
except :
break
def original(start, end) :
if start > end :
return
standard = end + 1
for i in range(start+1, end+1) :
if lis[i] > lis[start] :
standard = i
break
original(start+1,standard-1)
original(standard,end)
print(lis[start])
original(0,len(lis)-1)
< 내 틀렸던 풀이, 문제점>
import sys
lis = []
while True :
try :
num = int(sys.stdin.readline().rstrip())
lis.append(num)
except :
break
def original(root, start, end) :
standard = start+1
for i in range(start+1, end+1) :
if lis[i] > root :
print(lis[start+1:end+1], lis[i], root)
standard = i
break
print("std ", standard,"rot", root, 'new', lis[standard])
original(lis[start+1],start+2,standard-1)
original(lis[standard],standard+1,len(lis)-1)
print(root)
else :
return
root = lis[0]
original(root, 0, len(lis)-1)
- 근데 어차피 루트는 해당 문자열에서 start 인덱스에 해당하는 아이지 .
- 루트 불필요하게 넘겨주는 것 제외시키기
import sys
lis = []
while True :
try :
num = int(sys.stdin.readline().rstrip())
lis.append(num)
except :
break
def original(start, end) :
standard = start+1
for i in range(start+1, end+1) :
if lis[i] > lis[start] :
standard = i
break
original(start+1,standard-1)
original(standard,len(lis)-1)
print(lis[start])
root = lis[0]
original( 0, len(lis)-1)
- 내가 어려워했던 점 : standard 의 초기값 설정 어케해야하는지
- 멈춤 조건 (return 조건 언제해야하는지)
recursion error
import sys
lis = []
while True :
try :
num = int(sys.stdin.readline().rstrip())
lis.append(num)
except :
break
def original(start, end) :
if start > end :
return
standard = end + 1
for i in range(start+1, end+1) :
if lis[i] > lis[start] :
standard = i
break
original(start+1,standard-1)
original(standard,len(lis)-1)
print(lis[start])
original(0,len(lis)-1)
출력초과
import sys
sys.setrecursionlimit(10**5)
lis = []
while True :
try :
num = int(sys.stdin.readline().rstrip())
lis.append(num)
except :
break
def original(start, end) :
if start > end :
return
standard = end + 1
for i in range(start+1, end+1) :
if lis[i] > lis[start] :
standard = i
break
original(start+1,standard-1)
original(standard,len(lis)-1)
print(lis[start])
original(0,len(lis)-1)
<반성 점>
<배운 점>
- 처음 입력을 어케 받아야하나 어려웠는데 파이썬 try-except 문으로 접근해주는 거여따
try:
temp = int(input())
except:
break
레퍼런스 (참고)
https://imzzan.tistory.com/41