프로그래머스 - 42895 N으로 표현 풀이
문제
42895 N으로 표현
풀이
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.