[Programmers] KakaO 양궁 문제 Lv2 + 연습문제

Jihoon·2023년 5월 31일
0

알고리즘

목록 보기
13/14

KakaO 양궁 문제 Lv2


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차원 리스트)들의 정렬 방법

profile
장난감이 데이터인 사람

0개의 댓글