728x90
문제
제시된 숫자와 거꾸로 나열한 숫자에 사칙연산을 넣은 계산식이 같게하라
(연산자는 최소1번 이상 쓰여야 하며 사칙연산 규칙을 지켜야한다)
351 3*51 =153
621 6*21 = 126
난이도
IQ 70
목표시간
10분
문제풀이(사용언어:C#, 작성도구:VisualStudio2019)
제한시간 내에 풀지 못했다.
문자열 상태에서 모든 경우의 수의 연산자를 대입해서
스택,큐를 이용해서 문자열 식을 후위식으로 전환해서 계산하려고 했다.
문제정답(사용언어:python)
1. *를 제외한 다른 연산자를 한번이라도 쓰게되면 4자리를 넘지 못하므로 다른 연산자는 신경쓰지 않아도 된다.
(999+9 = 1008와 같은 덧셈만 있는 몇가지 경우 4자리를 넘기는 경우가 몇번 있긴 하다 하지만 제외.)
import re
op = ["*",""]
for i in range(1000,10000):
c = str(i)
for j in range(0,len(op)):
for k in range(0,len(op)):
for l in range(0,len(op)):
val = c[3] + op[j] + c[2] + op[k] +c[1] + op[l] + c[0]
# 0으로 시작하는 숫자가 있는지 확인하고 있는 경우 제거
val = re.sub(r"0(\d+)", r"\1",val)
#연산자를 하나라도 넣은 경우
if len(val) >4 :
if i == eval(val) :
print(val, "=", i);
배운점
연산자를 대입하는 경우의 수는 무척 간단했으나.. 문자열 계산기를 단시간에 만들기는 좀 버거웠다.. 그런데 eval()로 문자열 계산을 처리하는 답지를 보니 무척 허탈하다.. api를 소개하는 책인가?;
728x90
'Algorithm > Solving' 카테고리의 다른 글
[책-알고리즘퍼즐68]6.콜라츠 추측 (0) | 2020.01.28 |
---|---|
[책-알고리즘퍼즐68]5.환전자판기 (0) | 2020.01.20 |
[책-알고리즘퍼즐68]4.막대자르기 (0) | 2020.01.20 |
[책-알고리즘퍼즐68]3.카드뒤집기 (0) | 2020.01.08 |
[책-알고리즘퍼즐68]1.앞뒤가 같은 10진수 만들기(회문) (0) | 2020.01.06 |