study/알고리즘

[python] programmers - N으로 표현

It's Hyeeun Time 2021. 9. 27. 23:56

오늘의 알고리즘은

이전에 이해하지 못했던 문제와

유사한 문제였기에

( 백준의 동전1

https://www.acmicpc.net/problem/2293 )

해설을 찾아보면서도 이해하지 못할까 걱정을 많이 했다.

 

다행히 잘 정리해주신 분들이 많이 있었고

특히 아래에 기재한 블로그가

해설 이해에 큰 도움을 주었다.

 

참고한 블로그는 맨 밑에 기재해 놓겠다.

 

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

 

코딩테스트 연습 - N으로 표현

 

programmers.co.kr

 

1. 아이디어 구축

 

문제의 핵심은 답안을 구하기 위해

과정을 하나씩 거쳐가 보는 것이 아닌

나올 수 있는 모든 수들을 저장하며 진행하는 것이다.

 

3개에서 나올 수 있는 결과는

1개와 2개를 경우의 수를 조합한 것으로

예시는 아래와 같다.

 

2. 코드 구현

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def solution(N, number):
    answer = 0
    # nums: 인덱스 번호에 인덱스 번호 만큼의 수를 사용하여 만들 수 있는 수들의 리스트를 저장
    nums = [[]] 
    
    def make_num():
        for i in range(19):
            # 최소한 1개 최대 8개까지 가능
            tmp_lst = []
            # 이미 만들어진 수를 조합해서 만드는 경우
            for j in range(1, i):
                for k in nums[j]:
                    for l in nums[i-j]:
                        # 더하기
                        tmp_lst.append(k+l)
                        # 빼기
                       tmp_lst.append(abs(k-l))
                        # 곱하기
                        tmp_lst.append(k*l)
                        # 나누기
                        if k != 0 and l != 0:
                           if k >= l:
tmp_lst.append(k//l)
else:
tmp_lst.append(l//k)
            # 수들이 연속적으로 나올 수 있음(ex. 555)
            tmp_lst.append(int(str(N)*i))
            # 만일 i개를 이용하여 만든 수들의 배열 안에 찾는 숫자가 있다면 i리턴
            if number in tmp_lst:
                return i
            nums.append(list(set(tmp_lst)))
 
        # 8까지 돌아본 후에도 없다면 -1 리턴
        return -1
 
    answer = make_num()
    return answer
    cs

 

 

3. 참고 블로그

 

https://gurumee92.tistory.com/164

 

프로그래머스 문제 풀이 N으로 표현

이 문제는 이시윤 강사님의 프로그래머스 강좌 "파이썬을 무기로, 코딩테스트 광탈을 면하자!"를 보고 정리한 내용입니다. 문제 URL N으로 표현 Contents 문제 지문 파악하기 강사님의 알고리즘 풀

gurumee92.tistory.com