ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] N으로 표현
    코딩테스트 2024. 12. 31. 00:09

    https://school.programmers.co.kr/learn/courses/30/lessons/42895 

     

    프로그래머스

    SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

    과정:

    아래 풀이는 일부 테스트 결과에서 실패 발생

    def solution(N, number):
        answer = 0
        cal_list = [[N],[],[],[],[],[],[],[]]
    
        if N == number: #아래 for문은 cal_list의 1번째 인덱스부터 고려되므로 0번째 인덱스의 값이 number와 동일할때를 추가함
            return 1 #N이 하나일때 number와 동일 ex) N=5,number=5
    
        for i in range(1,8): #1~7
            if int(str(N)*(i+1)) == number: #NNN.. ex) N=5,number=555
                return i+1
            else:
                cal_list[i].append(int(str(N)*(i+1)))
            for j in range(i):
                for x in cal_list[j]:
                    if x+int(str(N)*(i-j)) == number: #더하기
                        return i+1
                    else:
                        cal_list[i].append(x+int(str(N)*(i-j)))
    
                    if x-int(str(N)*(i-j)) == number: #빼기
                        return i+1
                    else:
                        cal_list[i].append(x-int(str(N)*(i-j)))
    
                    if x*int(str(N)*(i-j)) == number: #곱하기
                        return i+1
                    else:
                        cal_list[i].append(x*int(str(N)*(i-j)))
    
                    if x//int(str(N)*(i-j)) == number: #나누기
                        return i+1
                    else:
                        cal_list[i].append(x//int(str(N)*(i-j)))
    
    
    
        return -1

     

    예시를 통한 풀이

    ex) 5와 사칙 연산으로 표현 할 수 있는 숫자들
    5가 1개: 5
    5가 2개: 5+5, 5-5, 5*5, 5//5, 55
    5가 3개: 5+5(4)5, 5-5(4)5, 5*5(4)5, 5//5(4)5, 55(4)5, 555, 5//55, 5+55, 5-55, 5*55
    ...
    ※ (4) == 사칙연산들( +, -, *, // )

    5가 3개
    i) (4)555 : 0+555 0-555 0*555 0//555
    ii) 5(4)55 : 5+55 5-55 5//55 5*55
    iii) 55(4)5 : 5(2)4(5) 5+5+5 ...


    5가 5개
    5(0)4(55555)
    5(1)4(5555)
    5(2)4(555)
    5(3)4(55) => 5+5+5+55 5+5-5+55 5*5//5+55   55+5+55
    5(4)4(5)

     

    예시를 통한 풀이 + 실패 이유

    ex) 5와 사칙 연산으로 표현 할 수 있는 숫자들
    5가 1개: 5
    5가 2개: 5+5, 5-5, 5*5, 5//5, 55
    5가 3개: 5+5(4)5, 5-5(4)5, 5*5(4)5, 5//5(4)5, 55(4)5, 555, 5//55, 5+55, 5-55, 5*55
    5-(5(4)5), 5//(5(4)5) <- 이 부분을 놓침 연산 순서에 따라 영향을 받는 -,// 연산을 고려해야됨

    ...
    ※ (4) == 사칙연산들( +, -, *, // )
    def solution(N, number):
        answer = 0
        cal_list = [[N],[],[],[],[],[],[],[]]
    
        if N == number: #아래 for문은 cal_list의 1번째 인덱스부터 고려되므로 0번째 인덱스의 값이 number와 동일할때를 추가함
            return 1 #N이 하나일때 number와 동일 ex) N=5,number=5
    
        for i in range(1,8): #1~7
            if int(str(N)*(i+1)) == number: #NNN.. ex) N=5,number=555
                return i+1
            else:
                cal_list[i].append(int(str(N)*(i+1)))
            for j in range(i):
                for x in cal_list[j]:
                    if x+int(str(N)*(i-j)) == number: #더하기
                        return i+1
                    else:
                        cal_list[i].append(x+int(str(N)*(i-j)))
    
                    if x-int(str(N)*(i-j)) == number: #빼기
                        return i+1
                    else:
                        cal_list[i].append(x-int(str(N)*(i-j)))
    
                    if x*int(str(N)*(i-j)) == number: #곱하기
                        return i+1
                    else:
                        cal_list[i].append(x*int(str(N)*(i-j)))
    
                    if x//int(str(N)*(i-j)) == number: #나누기
                        return i+1
                    else:
                        cal_list[i].append(x//int(str(N)*(i-j)))
    				
                    #-,//추가
                    if int(str(N)*(i-j))-x == number:
                        return i+1
                    else:
                        cal_list[i].append(int(str(N)*(i-j))-x)
    
                    if x != 0:
                        if int(str(N)*(i-j))//x == number:
                            return i+1
                        else:
                            cal_list[i].append(int(str(N)*(i-j))//x)
    
    
    
        return -1
Designed by Tistory.