본문 바로가기

컴퓨터/코테

카카오 외벽 점검

from itertools import permutations
def solution(n, weak, dist):
    answer = 10000000
    dist.sort(reverse=True)
    weak.sort()
    friendsNum = len(dist)
    weakLen = len(weak)
    for i in range(weakLen):
        weak.append(weak[i]+n)
    friendPerm = list(permutations(dist, friendsNum))
    isFailed = True
    for i in range(weakLen):
        currentWeak = weak[i:i+weakLen]
        for friendComb in friendPerm:
            curWeakIdx = 0
            curFriendIdx = 0
            while curFriendIdx != friendsNum and curWeakIdx != weakLen:
                untilThisPoint = currentWeak[curWeakIdx] + friendComb[curFriendIdx]
                while curWeakIdx != weakLen and untilThisPoint >= currentWeak[curWeakIdx]:
                    curWeakIdx+=1
                curFriendIdx+=1
            if curWeakIdx == weakLen :
                isFailed = False
                answer = curFriendIdx if curFriendIdx < answer else answer
    return answer if not isFailed else -1

자료가 원형인 경우에는 길게 늘이면 답이 보인다.

 

3 4 13 23 24 자꾸 틀려서 한시간 쏟아부었는데 알고보니 불가능한 경우 -1 리턴하는걸 전혀 안해주고 있어서 그랬다.....

만약 한번이라도 가능한게 있다면 그것을 answer로 내주고 모든 조합에서 불가능하다면 -1을 리턴하도록 해야한다.

안그러면 이번엔 5 6 22 번 등이 틀린다ㅋㅋㅋㅋ