[プログラマ]DP-Nと表示
6226 ワード
質問リンク
コードテスト練習-Nと表示
問題を解く
Nと4則演算のみで数字を表す方法では、Nの使用回数の最大値を求める.
条件
ピークが
IN
N
number
OUTN을 최소개 사용하여 number로 표현할때 N의 사용횟수
に答える
DPは専門のアルゴリズムの授業の後で初めて解いたので、よく知らないし、難しいです.
わかりませんが、ブログ記事(https://gurumee92.tistory.com/164)を参照してください.
Nを使用してnumberを最大8回作成します.
例1に示すように、N=5、number=12の場合
**set1** 5를 1번 사용하는 경우 → 5
**set2** 5를 2번 사용하는 경우 → 5를 2번 붙힌 55와 5+5, 5-5, 5*5, 5/5
→ 이때 set2는 5를 2번 붙히기 + set1의 원소 (+-*/) set1의 원소
**set3** 5를 3번 사용하는 경우 → 5를 3번 붙힌 555와 5+55, 5-55, 5*55, 5/55, 55+5, 55-5, 55*5, 55/5
→ 이때 set3는 5를 3번 붙히기 + set1의 원소 (+-*/) set2의 원소 + set2의 원소 (+-*/) set1의 원소
→setnを一般化し、:setnは5回+set 1の要素(+-/)set n-1の要素+set 2の要素(+-/)set n-2の要素+.+を貼り付けます.set n-1の要素(+-*/)set 1の要素
だから~
8セット作成
各セットにn回iを追加
ドア回りにiの1番目のセットにjの1番目のセットの要素(+-*/)i-j-1のセットの要素値を追加する
3.1このセットにnumberに対応する値がある場合、解答値を更新して切り離す
def solution(N, number):
answer = -1
if N == number:
return 1
#n을 1번부터 8번 사용한 set의 초기화
s = [set() for _ in range(8)]
for i,x in enumerate(s, start=1):
x.add(int(str(N) * i))
for i in range(1, 8):
for j in range(i):
for op1 in s[j]:
for op2 in s[i-j-1]:
s[i].add(op1 + op2)
s[i].add(op1 - op2)
s[i].add(op1 * op2)
if op2 != 0:
s[i].add(op1 // op2)
if number in s[i]:
answer = i + 1
break
return answer
Reference
この問題について([プログラマ]DP-Nと表示), 我々は、より多くの情報をここで見つけました https://velog.io/@woo0_hooo/DP-N으로-표현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol