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

+ Recent posts