알고리즘 공부

less than 1 minute read

N으로 표현
https://programmers.co.kr/learn/courses/30/lessons/42895
혼자선 도무지 해법조차 생각나지 않은 문제다..ㅠㅠ
고작 3단계에서 이리도 막히다니.. 넘 슬프다…
인터넷에서 본 해결법을 이해하는 걸로 만족해야했다.
풀이법은 주어진 숫자를 하나만 사용한 한자리수부터 여덟 자리수까지 집합에 넣어두고,
거기서 하나씩 돌면서 +,-,*,// 한 숫자들을 더해논다 그렇게 8 자리수까지 엮어서 모두 구한다음,
우리가 0부터 찾는 숫자가 가장 가까운데서 +1한게 답이되고 그게 끝까지 나올 수 있는 경우의 수를 모두 찾은 것이므로 없으면 -1이 된다.

def solution(N, number):
    answer = -1
    S = [set() for x in range(8)]
    print(S)

    for i, x in enumerate(S, start=1):
        x.add(int(str(N)*i))
        print(i)

    for i in range(1, len(S)):
        for j in range(i):
            for op1 in S[j]:
                for op2 in S[i-j-1]:
                    S[i].add(op1+op2)
                    S[i].add(op1-op2)
                    S[i].add(op1*op2)
                    if op2 != 0:
                        S[i].add(op1//op2)
        if number in S[i]:
            return i+1
    return -1

2주 뒤에 다시 풀 목록에 추가해둬야겠다..