Home 프로그래머스 - 42895 N으로 표현 풀이
Post
Cancel

프로그래머스 - 42895 N으로 표현 풀이

문제

42895 N으로 표현

screencapture

풀이

N이 1개일때부터 8개일때까지 number와 같은 수가 나올 때까지 모든 경우의 수를 연산한다.

  • 예를 들어
    • N이 1개이면 만들 수 있는 수는 5 뿐이다.
    • N이 2개이면 55, 5 + 5 = 10, 5 - 5 = 0, 5 * 5 = 25, 5 / 5 = 1. 즉, 55, 10, 0, 25, 1
    • N이 3개이면 555, 55 + 5 = 60, 55 - 5 = 50, 55 * 5 = 275, 55 / 5 = 11, 10 + 5 = 15, 10 - 5 = 5, 10 * 5 = 50, 10 / 5 = 2, 0 + 5 = 5, 0 - 5 = -5, 0 * 5 = 0, 0 / 5 = 0 등등등등…
    • number와 같은 수가 나오면 현재 N의 수를 반환한다.

kotlin code

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
import kotlin.math.pow

class Solution {
    fun solution(N: Int, number: Int): Int {
        val numbers = Array(8) { HashSet<Int>() }
        for(nCount in (1..8)) {
            val numbersIndex = nCount - 1
            numbers[numbersIndex].add(let {
                var num = N
                (1 until nCount).forEach {
                    num += N * 10.0.pow(it).toInt()
                }
                num
            })

            for(i in (1 until nCount)) {
                for(left in numbers[i-1]) {
                    for(right in numbers[(nCount - i) - 1]) {
                        numbers[numbersIndex].add(left + right)
                        numbers[numbersIndex].add(left - right)
                        numbers[numbersIndex].add(left * right)
                        if(right == 0) continue
                        numbers[numbersIndex].add(left / right)
                    }
                }
            }
            if(numbers[numbersIndex].contains(number)) return nCount
        }
        return -1
    }
}
This post is licensed under CC BY 4.0 by the author.

프로그래머스 - 60057 문자열 압축 풀이

프로그래머스 - 43238 입국심사