From 5ea5d547709a96bb69adb30f2c8078329ca338fe Mon Sep 17 00:00:00 2001 From: yenru0 Date: Sun, 3 May 2020 23:50:35 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=EC=B3=90=EC=A7=80=EB=82=98=EA=B0=80?= =?UTF-8?q?=EB=8A=94=20=EC=A7=80=EB=82=A0=EB=82=A0=EC=9D=98=20=EA=B8=B0?= =?UTF-8?q?=EC=96=B5=EB=93=A4=20(1463=202=EB=85=84=EB=A7=8C=EC=97=90=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zeta_python/1463.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 zeta_python/1463.py diff --git a/zeta_python/1463.py b/zeta_python/1463.py new file mode 100644 index 0000000..c7d157e --- /dev/null +++ b/zeta_python/1463.py @@ -0,0 +1,32 @@ +M = {1:0, 2:1, 3:1, 10:3} +def ndp(n): + global M + stack = [] + if n in M: + return M[n] + if n % 3 == 0: + stack.append((n, n//3)) + if n %2 == 0: + stack.append((n, n//2)) + stack.append((n, n-1)) + while stack: + node = stack[-1] + if node[1] in M: + if node[0] in M: + if M[node[1]] + 1 < M[node[0]]: + M[node[0]] = M[node[1]] + 1 + else: + M[node[0]] = M[node[1]] + 1 + stack.pop() + continue + if node[1] == 1: + M[node[0]] = 1 + stack.pop() + continue + if node[1] % 3 == 0: + stack.append((node[1], node[1]//3)) + if node[1] % 2 == 0: + stack.append((node[1], node[1]//2)) + stack.append((node[1], node[1] - 1)) + return M[n] +print(ndp(int(input()))) \ No newline at end of file