작성
·
295
0
질문 드립니다
최대 증가 수열이라면
3 2 10 1 5 4 7 8 9 6
3->6->9
break가 아니라
문자열을 초기화한 후
다시 새로 수열을 쌓아서
기존에 쌓은 수열의 길이와 비교해보아야하지 않나요?
n = int(input())
a = list(map(int, input().split()))
lt = 0
rt = n - 1
last = 0
string = ''
temp = []
while lt <= rt:
if a[lt] > last:
temp.append((a[lt], 'L'))
if a[rt] > last:
temp.append((a[rt], 'R'))
temp.sort()
# 이 부분 질문
if len(temp) == 0:
break
else:
last = temp[0][0]
# print(last)
tmp = temp[0][1]
string += tmp
if tmp == "L":
lt += 1
else:
rt -= 1
temp.clear()
print(string)
print(len(string))
답변 1
0
안녕하세요^^
그리디는 그 순간에 제일 좋은 것을 선택해 가면 그게 최적해가 되는 알고리즘입니다.
이 문제는 그리디로 해결되는 문제입니다. 만약 그게 의심스러우면 반례를 만들어보면서 경험적으로 증명하는게 그리디를 증명하는 거라 저는 생각합니다. 반례를 만들어보려고 노력해 보세요. 아무리 만들어도 안만들어 지면 그 때 느낌이 오는 그런 알고리즘이 그리디입니다.