def solution(n, info):
global answer, result
def score(ryan):
s = 0
for i in range(11):
if ryan[i] == info[i] == 0:
continue
if ryan[i] > info[i]:
s += 10 - i
else:
s -= 10 - i
return s
def dfs(idx, left, ryan):
global answer, result
if idx == -1 and left:
return
if left == 0:
s = score(ryan)
if result < s:
answer = ryan[:]
result = s
return
for i in range(left, -1, -1):
ryan[idx] = i
dfs(idx-1, left-i, ryan)
ryan[idx] = 0
answer = [0 for _ in range(11)]
result = 0
dfs(10, n, [0 for _ in range(11)])
return answer if result != 0 else [-1]
DFS 알고리즘 활용할 줄 알았지만, 이와 같이 복잡할 줄은 몰랐다..
for i in range(left, -1, -1) : 이 부분에서 left를 넣어줌으로써 한 칸씩 지나서 탐색 과정을 떠올리지 못했네
위에 부분 막혀서 정답을 본건데, 아마 이 부분하고 했으면 score 함수 만들어줘서 풀지 않았을까?
def solution(sequence, k):
answers = []
sum = 0
l = 0
r = -1
while True:
if sum < k:
r += 1
if r >= len(sequence):
break
sum += sequence[r]
else:
sum -= sequence[l]
if l >= len(sequence):
break
l += 1
if sum == k:
answers.append([l, r])
answers.sort(key=lambda x: (x[1]-x[0], x[0]))
return answers[0]
Left, Right : 한 큐에 끝낼 수 있었는데 반복문 두 개 써서 시간복잡도 초과
List -> lambda : ( ? )
물음표(?) 안에 X[0] 이렇게 인덱스 파트 말고, X[1]-X[2] 이런식의 조건 가능함
2차원 배열의 원소(1차원 리스트)들의 정렬 방법