반응형


다른 블로그들은 연산자를 선택하여 계산을 하는 계산기가 거의 대부분이더라고요!
그래서 저는 나누기 곱하기 더하기 빼기가 섞인 연산을 할 수 있는 코드 작성을 해보려고 합니다!!

 

파이썬 백준 입력 조건 이해하기 / 사칙연산, 계산기

오늘은 백준에서 문제를 풀고 나름대로 코드를 작성해서 입력을 했는데도.. 계속 런타임에러나 컴파일 에러가 나오는 분들에게 도움이 되고자!! 제가 이해한 내용을 포스팅합니다~ 먼저, 가장

irunstudy.tistory.com

 

문제 : 사용자에게 입력받은 사칙연산하는 계산기를 만드시오.

 

입력 : cal1 = input() # "5*7+10/2-2"



먼저, 문제에서 사용자에게 입력받은 값의 type은 문자열로 받기에 이를 이해해야합니다.
잘 살펴보면 저희는 숫자를 가지고 규칙이 있는 코드를 작성할 수 없기에 +,-,*,/를 기준으로 문자열을 이용해야하는 것을 알 수 있습니다! 만약 자릿수가 다르게 입력되어도 코드가 실행되어야하기에 이를 고려해주어야합니다.

cal1 = cal1.replace('+',' + ').replace('-',' - ').replace('*',' * ').replace('/',' / ')
cal1 = cal1.split(' ')
cal1_list = []


저는 연산자를 포함해서 모든 값을 리스트에 넣고 싶었습니다. 그럴려면 각 연산자를 기준으로 일일이 다 나누어주는 방법과 특정 문자 또는 공백을 연산자 앞뒤에 넣어 스플릿함수를 사용하면 될 것 같았습니다!
그래서 각 연산자 앞뒤로 공백을 넣어주고, 이후 이를 공백 기준으로 잘라서 리스트 형태로 cal1에 저장했습니다.
이후로 고려해야 할 것은 곱하기 나누기를 먼저한 이후 더하기 빼기를 계산해야하므로 곱하기 나누기 앞뒤의 숫자를 먼저 계산해주고! 마지막 자리에 넣어주고 더하기 빼기를 다른 리스트를 생성해서 연산자와 더해줍니다!!

"5 * 7 + 10 / 2 - 2" 에서 곱하기를 한 후
"35 + 10 / 2 - 2"에서 나누기를 계산하고
"35 + 5 - 2"로 계산이 되고 이후 차례로 계산하는 코드를 작성할 것 입니다.

 

   for i in range(0,len(cal1)):
        if cal1[i] == '*':
            val = float(cal1[i-1])*float(cal1[i+1])
            del cal1[i+1]
            cal1.insert(i+1,val)

        elif cal1[i] == '/':
            val = float(cal1[i-1])/float(cal1[i+1])
            del cal1[i+1]
            cal1.insert(i+1,val)

        elif cal1[i] == '+':
            cal1_list.append(float(cal1[i-1]))
            cal1_list.append(cal1[i])

        elif cal1[i] == '-':
            cal1_list.append(float(cal1[i-1]))
            cal1_list.append(cal1[i])
   
    cal1_list.append(float(cal1[len(cal1)-1]))
 
이렇게 하면 사실 중간중간 cal1의 리스트에는 남아 있는 데이터가 있습니다. 하지만, 계속 list index가 뒤로 밀려서 계산이 이루어지기 때문에 중복값이 나오지 않고 계산이 되는 것 입니다. 또한 중복 계산되지 않도록 cal1_list를 생성하여 여기에 추가를 합니다.

 


    for i in range(0,len(cal1_list)):
        if cal1_list[i] == '+':
            val = cal1_list[i-1] + cal1_list[i+1]
            del cal1_list[i+1]
            cal1_list.insert(i+1,val)

        elif cal1_list[i] == '-':
            val = cal1_list[i-1] - cal1_list[i+1]
            del cal1_list[i+1]
            cal1_list.insert(i+1,val)
       
    print(cal1_list[len(cal1_list)-1])


마지막으로 cal1_list에 있는 더하기 빼기를 계산해주면 사칙연산 계산기 코드 작성 완료!!

반응형

+ Recent posts