Algorithm (PS)

HackerRank - Problem Solving (Basic) Skills Certification Test

minjiwoo 2022. 1. 17. 17:29
728x90

Question 1

def maxCost(cost, labels, dailyCount):
    # Write your code here
    total = 0
    result = []
    count = 0 # count the legal laptop
    n = len(cost)
    for i in range(n):
        if labels[i] == "legal":
            count += 1
            total += cost[i]
            if count == dailyCount:
                result.append(total)
                total = 0
                count = 0
        else:
            total += cost[i]
    if len(result) == 0:
        return 0
    else:
        return max(result)

 

Question 2

def mostBalancedPartition(parent, files_size):
    def helper(node, adj, file_sizes):
        queue = [node]
        weight = 0
        while queue:
            index = queue.pop()
            weight += file_sizes[index]
            if index in adj:
                queue.extend(adj[index]) # extend는 iterable 타입을 추가해줄 떄 사용한다.
        return weight
    adj = {}
    edges = []
    for index, p in enumerate(parent):
        edges.append((p, index))
        if p in adj:
            adj[p].append(index)
        else:
            adj[p] = [index]

    total_weight = sum(files_size)
    min_diff = sum(files_size)
    for e in edges:
        p, c = e
        adj[p].remove(c) # index를 삭제했을 떄 -> 연결 끊기
        w1 = helper(c, adj, files_size) # c와 연결되어 있는 노드들의 value 합을 w1에 저장
        min_diff = min(min_diff, abs(total_weight-w1*2))
        adj[p].append(c)
    return min_diff
728x90