개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • Books (13)
      • 읽기 좋은 코드가 좋은 코드다 (13)
    • Study (6)
      • Blockchain (3)
      • Algorithm (3)
    • Baekjoon (36)
    • Programmers (166)
    • LeetCode (15)
    • Open Source (1)
      • Youtube Popout Player (1)
    • Language (32)
      • Python (9)
      • JS (8)
      • Java (5)
      • HTML (6)
      • CSS (4)
    • Library & Framework (15)
      • React.js (15)
    • IDE (2)
      • IntelliJ (2)
    • Airdrop (9)
    • Tistory (2)
    • etc.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

  • 알고리즘문제풀이
  • 신규 코인 에어드랍
  • programmers
  • Cozubi
  • 카카오 코딩테스트
  • 클린 코드 작성법
  • 카카오 알고리즘 문제
  • 프로그래머스
  • 코인줍줍
  • Python
  • 코주비
  • Java
  • 카카오 공채
  • 2018 KAKAO BLIND RECRUITMENT
  • 백준
  • 프로그래머스 위클리 챌린지
  • 읽기 좋은 코드가 좋은 코드다
  • 파이썬
  • 클린 코드
  • 코딩테스트연습

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

[프로그래머스] N으로 표현 / Python
Programmers

[프로그래머스] N으로 표현 / Python

2021. 1. 28. 11:08
반응형

문제주소 :programmers.co.kr/learn/courses/30/lessons/42895

 

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

 

programmers.co.kr


<문제 설명>

더보기

문제 설명

아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.

12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5

5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.

제한사항

  • N은 1 이상 9 이하입니다.
  • number는 1 이상 32,000 이하입니다.
  • 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다.
  • 최솟값이 8보다 크면 -1을 return 합니다.

입출력 예

N                                              number                                        return
5 12 4
2 11 3

입출력 예 설명

예제 #1
문제에 나온 예와 같습니다.

예제 #2
11 = 22 / 2와 같이 2를 3번만 사용하여 표현할 수 있습니다.

 

<풀이법>

▒ 한줄 개념: 동적 계획법 ▒ 

N, number = 5, 12라는 예제에서,

N = 1 : [ 5 ]

N = 2 : [ 10(5+5), 0(5-5), 25(5*5), 1(5//5), 55('5'*2) ]

N = 3 : [ 15(5+10), 50(5*10), 5(5+0), 0(5*0), 5(5-0), 30(5+25), 125(5*25), 6(5+1), 5(5*1)... ]

....

다음과 같이 N에 따라 값들이 나오는 것을 확인할 수 있다.

N=2에서는 N=1일때의 원소들을 가지고 사칙연산을 진행한다. 

N=3에서는 N=1과 N=2의 원소들을 가지고 사칙연산을 진행한다.

여기서 얻어낼 수 있는 규칙은 다음과 같다.

2 = 1+1
3 = 1+2, 2+1

어떤 N에 대한 원소들을 고르려면, 더해서 N이 되는 두 정수 값의 배열들이 사칙연산의 대상이 된다는 것이다.

 

다시 위의 N=3을 볼 경우, 3은 1+2, 2+1로 만들 수 있으므로, N=1의 원소들과 N=2의 원소들을 가지고 사칙연산을 진행하면 된다. 그리고 5, 55, 555와 같이 N을 단순히 붙여 만드는 숫자들만 추가하여 dp에 저장해두면 풀 수 있다.

 

시간 초과 등의 효율성 문제를 걱정할 수 있지만, N=8까지만 진행하기 때문에 딱히 에러는 발생하지 않는다.

 

<코드(Python)>

def solution(N, number):
    dp = [[]]
    for i in range(1, 9):
        temp = []
        for j in range(1, i):
            for k in dp[j]:
                for l in dp[i - j]:
                    temp.append(k + l)
                    if k - l >= 0:
                        temp.append(k - l)
                    temp.append(k * l)
                    if l != 0 and k != 0:
                        temp.append(k // l)
        temp.append(int(str(N) * i))
        if number in temp:
            return i
        dp.append(list(set(temp)))

    return -1

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형

'Programmers' 카테고리의 다른 글

[프로그래머스] 등굣길 / Python  (2) 2021.01.28
[프로그래머스] 정수 삼각형 / Python  (0) 2021.01.28
[프로그래머스] 순위 검색 / Python  (5) 2021.01.26
[프로그래머스] 다리를 지나는 트럭 / Python  (0) 2021.01.26
[프로그래머스] 신규 아이디 추천 / Python  (0) 2021.01.25
    'Programmers' 카테고리의 다른 글
    • [프로그래머스] 등굣길 / Python
    • [프로그래머스] 정수 삼각형 / Python
    • [프로그래머스] 순위 검색 / Python
    • [프로그래머스] 다리를 지나는 트럭 / Python
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바