Python/백준 (BOJ)

[BOJ][B2]큰 수 계산 - 2408

ㅋㅋ! 2025. 8. 27. 13:00

https://www.acmicpc.net/problem/2408

문제 전문은 링크 참조

문제가공

  1. 숫자와 연산자(+, -, *, /)가 번갈아서 입력된다.
  2. 입력된 수식의 결과값을 출력한다(사칙연산 O)

코드작성

  1. 값을 입력받는다.
  2. 입력값이 숫자고 A변수가 None이면, A변수에 할당
  3. 연산자(곱셈,나눗셈)이 들어오면 숫자값을 하나 더 입력받아 연산처리 후 결과를 A에 할당
  4. 연산자(덧셈,뺄쎔)이 들어오면 A와 입력된 연산자를 arr 배열에 추가하고, A=None 처리
  5. 정해진 수(N)만큼 숫자 입력이 끝나면 마지막 A값을 arr에 추가.
  6. arr 배열의 길이가 1이면 그 값이 결과값이고, 아니면 0이 될 때까지 덧셈 뺄셈 연산 처리를 한다.
import sys
arr =[] 
answer =0
n = int(sys.stdin.readline().strip())
cnt = 0
A = None
#F = None
while True: 
    val = sys.stdin.readline().strip()
    if val in ('+','-','*','/'):
        if(val in ['*','/']):
            B = int(sys.stdin.readline().strip())
            cnt+=1
            A = A*B if val =='*' else A//B 
        else:
            if A !=None:
                arr.append(A)
                arr.append(val)
                A=None
    else:
        if A ==None: A = int(val)
        else : arr.append(val)
        cnt+=1
    if cnt == n:
        arr.append(A)
        break
if(len(arr) == 1):print(arr[0])
else:
    answer = arr.pop(0)

while len(arr) !=0:
    F = arr.pop(0)
    B =int(arr.pop(0))
    answer = answer + B*(1 if F =='+' else -1)
print(answer)

리뷰

간단하게 처리하려면 입력받는 값들을 하나의 문자열로 수식을 완성하여 eval()함수를  사용하면 되지만, eval()함수는 실무적으로 사용하기에 굉장히 위험한 함수이기 때문에 제외하고 처리했다.

'Python > 백준 (BOJ)' 카테고리의 다른 글

[BOJ][B2]카드놀이- 2511  (0) 2025.08.29
[BOJ][B2]연속구간 - 2495  (0) 2025.08.28
[BOJ][B2]주사위 네개- 2484  (0) 2025.08.26
[BOJ][B2]도비의 영어 공부 - 2386  (0) 2025.08.25
[BOJ][B2]시그마 - 2355  (2) 2025.08.24