티스토리 뷰
문제
겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산자이다. 따라서, 화성에서는 수학 식의 가장 앞에 수가 하나 있고, 그 다음에는 연산자가 있다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 줄에는 화성 수학식이 한 줄에 하나씩 주어진다. 입력으로 주어지는 수는 정수이거나 소수 첫째 자리까지 주어지며, 0 이상 100 이하이다. 연산자는 최대 3개 주어진다.
출력
각 테스트 케이스에 대해서, 화성 수학식의 결과를 계산한 다음에, 소수점 둘째 자리까지 출력한다.
((참고 더보기 클릭))
### 소수점 2자리 ###
1. f-string
f"{실수: .자리수f}"
print(f'{3.14: 0.2f}'}
2. round 메서드
round(실수, 자릿수)
print(f"{round(3.14, 2)}")
3. format메서드
format(실수, ".자리수f")
print(format(3.14, "0.2f"))
4. "{}".format()메서드
"{인덱스:.자리수f}".format(실수)
print("{: 0.2f}".format(3.14))
### 문자열 포매팅 ###
%f소수점 6자리
%0.2f 소수점 2자리
0.f%% 라고 적으면 퍼센트 표시
% 문자열 포매팅 -> 개선 -> str.format -> 개선 -> f-string
'''
방법 1
'''
# t에 테스트 케이스 개수를 입력 받기
t = int(input())
# t에 저장된 테스트 케이스 수만큼 반복
for _ in range(t):
mars = list(map(str, input().split())) # 입력받은 것을 리스트 변수로 만듬
answer = 0
#len()메서드는 list 요소 개수를 돌려줌
for i in range(len(mars)): #mars 길이만큼 반복(연산자 수만큼 연산자 계산)
if i == 0: #index 0 은 숫자. 즉 숫자만 입력시
answer += float(mars[i])
else: #화성 연산자 정의
if mars[i] == '@':
answer *= 3
elif mars[i] == '%':
answer += 5
elif mars[i] == '#':
answer -= 7
print(f'{answer: 0.2f}') #f'{연산값: 소수2자리}'
'''
방법 2 가장 선호하는 방법
'''
t = int(input())
for _ in range(t):
mars = list(map(str, input().split()))
answer = float(mars[0])
for i in range(len(mars)) :
if mars[i] == '@':
answer *= 3
elif mars[i] == '%':
answer += 5
elif mars[i] == '#':
answer -= 7
print(f'{answer:0.2f}')
'''
방법 3 pop() 메서드
'''
t = int(input())
for _ in range(t):
mars = list(input().split())
answer = float(mars.pop(0)) #pop(0)메서드 호출시 첫 번째 데이터 제거
#pop(n)지정한 인덱스 삭제하고 삭제한 값 획득
#pop() 인덱스가 없는 경우 마지막 값 획득하고 삭제
for i in range(len(mars)):
if mars[i] == '@':
num *= 3
elif mars[i] == '%':
num += 5
elif mars[i] == '#':
num -= 7
print(f'{answer: 0.2f}')
'''
방법 4
'''
t = int(input())
for _ in range(t):
mars = list(map(str, input().split()))
answer = float(mars[0]) #리스트변수에서 인덱스 0값은 계산을 시작하는 값이라 따로 실수로 변수 생성
operators = mars[1:] #리스트변수에서 인덱스 1부터 끝까지 값은 연산자로서 따로 리스트변수 생성
# 리스트슬라이싱 [인데스n부터:인덱스m까지] n부터 m까지 잘라서 새 리스트 만듬
for operator in operators : #연산자 리스트 변수에서 연산자들 하나씩 반복
if operator == "@":
num *= 3
elif operator == "%":
num += 5
elif operator == "#":
num -= 7
print(format(answer, ".2f"))
'''
방법 5
'''
for _ in range(int(input())):
s = input()
print('{0:0.2f}'.format(eval('('*s.count('
')+s.replace('@','*3)').replace('%','+5)').replace('#','-7)'))))
알고리즘 분류
'coding practice > BOJ' 카테고리의 다른 글
[백준] 2935번 Python: 소음 (0) | 2022.05.12 |
---|---|
[백준] 2675번 Python: 문자열 반복 (0) | 2022.05.12 |
[백준] 2914번 Python: 저작권 (0) | 2022.05.11 |
[백준] 2530번 Python: 인공지능 시계 (0) | 2022.05.10 |
[백준] 2525번 Python: 오븐 시계 (0) | 2022.05.10 |