๐
ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ
์ฑ ์ ์ฐธ๊ณ ํ์ต๋๋ค.
์ซ์์ ์ฐ์ฐ์์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ฉด ์ซ์์ ์ฐ์ฐ์๋ฅผ ๊ทธ๋ฃนํํ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ณ์ฐํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. ์ ํจํ ์ฐ์ฐ์๋ +,-,*์ ๋๋ค.
๋ถํ ์ ๋ณต์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ค.
๋ถํ ์ ๊ธฐ์ค์ ์ ํจํ ์ฐ์ฐ์
๊ฐ ๋๋ค.
๋ถํ ์ ๋ชจ๋ ์ฐ์ฐ์์ ๋ํด์ ์ํ๋์ด์ผ ํ๋ฉฐ ์ํ๋๋ ์์๋ํ ์ค์ํ๋ค.
๋ฐ๋ผ์, ๋ชจ๋ ์์์ ๋ํด ๋ถํ ๋ ์ ์๋๋ก ๊ฐ ์ฌ๊ท๋ง๋ค ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ค.
๊ฒฐ๊ณผ๋ ํ ๋จ๊ณ์์ ๋์ฌ ์ ์๋ ๋ชจ๋ ์์์ ๋ํด ๊ณ์ฐํ ๊ฐ์ด๋ค.
์ด๊ฒ์ ์ฒซ๋ฒ์งธ ์ฌ๊ท๊ฐ ๋๋ ๋ ๊น์ง ๋ชจ๋ ์ํํ๋ฉด ๋ชจ๋ ์์์ ๋ํ ๊ณ์ฐ๊ฐ์ ์ป์ ์ ์๋ค.
์ฝ๋์ ์ฃผ์์ ๋ณด๋ฉด์ ์ดํดํด๋ณด์.
class Solution:
result = []
def diffWaysToCompute(self, input: str) -> List[int]:
def operation(le, ri, oper):
sm = 0
result = []
for l in le:
for r in ri:
if oper == "+":
sm = l + r
elif oper == "-":
sm = l - r
elif oper == "*":
sm = l * r
result.append(sm)
return result
results = []
# ์ฐ์ฐ์์์ด ์ค์ง ์ซ์๋ง์ ๊ฐ์ง ๋ ๋ฆฌ์คํธ ํํ๋ก ๋ฐ๋ก ๋ฐํ.
if input.isdigit():
return [int(input)]
# ์ฐ์ฐ์ด ์ํ๋๋ ์์์ ๋ฐ๋ผ ๊ฐ์ด ๋ฌ๋ผ์ง๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ฐ๋ณต์ด ํ์ํ๋ค.
for i in range(len(input)):
if input[i] in '+-*':
# ํ์ฌ ์ฐ์ฐ์ ๊ธฐ์ค์ผ๋ก ๋ถํ
left = self.diffWaysToCompute(input[:i])
right= self.diffWaysToCompute(input[i + 1:])
# ์์ชฝ ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉํด์ ๋์จ ๊ฐ๋ค์ ๋ฃ์ด์ค
# ์ฌ๋ฌ ๊ฐ์ด ๋ฆฌ์คํธ๋ก ๋์ค๋ ๊ฒ์ ์์๋ง๋ค ๋์ฌ ์ ์๋ ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ!
results.extend(operation(left, right, input[i]))
return results
์ฌ๊ท ์ข
๋ฃ์กฐ๊ฑด์ผ๋ก input.isdigit()
์ธ ์ด์ ๋ ๋ง์ฝ len(input) == 1
์ด๋ผ๊ณ ํ๋ค๋ฉด ์ซ์๊ฐ ์ญ์์๋ฆฌ์ ์ด์์ผ ๋๋ฅผ ํฌํจ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์, ์ค์ง ์ซ์๋ง ์์ ๋๋ผ๊ณ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค.