일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ICT봉사단
- 아부다비
- 울란바토르
- 초원
- 몽골 고기
- Python
- 몽골 헬스장
- 코로나
- 게르
- 칭기스칸 동상
- 칭기즈칸
- 파이썬
- 교환학생
- LG글로벌챌린저
- 독일
- 백준
- 소프트웨어 아카데미
- 한 줄로 서기
- SWEA
- 헬스
- 몽골
- 테를지국립공원
- 담슈타트
- 월드프렌즈
- 테를지
- 여행
- algorithm
- 알고리즘
- 월드프렌즈 ICT 봉사단
- 몽골요리
- Today
- Total
맛있는물회
[맛있는물회] <SWEA알고리즘> 4874번 "Forth" 본문
문제 조건
Forth라는 컴퓨터 언어는 스택 연산을 기반으로 하고 있어 후위 표기법을 사용한다. 예를 들어 3+4는 다음과 같이 표기한다.
3 4 + .
Forth에서는 동작은 다음과 같다.
숫자는 스택에 넣는다.
연산자를 만나면 스택의 숫자 두 개를 꺼내 더하고 결과를 다시 스택에 넣는다.
‘.’은 스택에서 숫자를 꺼내 출력한다.
Forth 코드의 연산 결과를 출력하는 프로그램을 만드시오. 만약 형식이 잘못되어 연산이 불가능한 경우 ‘error’를 출력한다.
다음은 Forth 연산의 예이다.
Input
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스의 별로 정수와 연산자가 256자 이내의 연산코드가 주어진다. 피연산자와 연산자는 여백으로 구분되어 있으며, 코드는 ‘.’로 끝난다.
나눗셈의 경우 항상 나누어 떨어진다.
Output
#과 1번부터인 테스트케이스 번호, 빈칸에 이어 계산결과를 정수로 출력하거나 또는 ‘error’를 출력한다.
생각한 아이디어
파이썬에서는 Char 처럼 문자 자료형을 따로 안쓰는 듯하다.
그래도 str으로 접근을 해도 내가 하고 싶은데로 다 되었다.
숫자를 어떻게 판단할까 하다가 특수문자를 먼저 if 로 거르고 else로 숫자를 받았는데 잘 안되는 듯 했다.
그래서 찾아보니 isDigit()이라는 좋은 함수가 있어서 사용하였다.
그런데 계속 해봐도 test 케이스 7개만 맞고 5개만 맞고 이런다. 어디가 문제인지 모르겠다.
아주 전형적인 stack 을 사용한 계산기 문제이다.
흠,,어쨌든 그냥 넘어가기로 했다.
Try Except를 처음 사용해봤는데 에러가 발생하면 except으로 넘어가고 이때 flag를 지정해주는 것이 중요한 포인트 인듯 하다.
소스코드
T = int(input())
for TC in range(1, T + 1):
string = list(input().split())
stk = list()
ans = 0
for i in range(len(string)-1):
if string[i].isdigit():
stk.append(string[i])
else:
try:
b,a = int(stk.pop()), int(stk.pop())
if string[i] == '+':
c = a + b
elif string[i] == '-':
c = a - b
elif string[i] == '*':
c = a * b
elif string[i] == '/':
c = a / b
stk.append(str(c))
except:
ans = -1
if ans == -1 or len(stk)>=2:
print("#%d" %TC, "error")
else :
print("#%d %d" %(TC, int(stk.pop())))
*파이썬 문법 정리
'IT > 알고리즘' 카테고리의 다른 글
[맛있는물회] <SWEA알고리즘> 1949번 "등산로 조성" (0) | 2020.04.06 |
---|---|
[맛있는물회] <백준 알고리즘> 15953번 "상금 헌터" (0) | 2020.04.05 |
[맛있는물회] <SWEA알고리즘> 4873번 "반복문자 지우기" (0) | 2020.04.05 |
[맛있는물회] <SWEA알고리즘> 4871번 "그래프 경로" (0) | 2020.04.05 |
[맛있는물회] <SWEA알고리즘> 4866번 "괄호검사 " (0) | 2020.04.05 |