코드업 문제집 파이썬 if~else 1231 : 계산기 1
[문제]
10+10, 10-3, 5*4, 10/3과 같이 하나의 계산식이 입력된다.
연산자에 맞게 계산한 결과를 출력한다.
나눗셈의 경우에만 소수 둘째 자리까지 출력한다.
[문제 해설(핵심)]
입력값은 숫자와 연산자가 따로 들어오는 것이 아니라
10+20
처럼 하나의 문자열로 입력된다.
따라서 문자열을 한 글자씩 확인하면서 +, -, *, / 중 어떤 연산자가 들어있는지 찾는다.
연산자의 위치를 찾았다면 그 위치를 기준으로 앞과 뒤를 잘라 숫자로 변환하면 된다.
10 + 20
↑ ↑
a b
[문제 풀이 1 - for문 + 문자열 슬라이싱]
문자열을 한 글자씩 확인해 연산자의 위치를 찾는다.
↓
연산자를 기준으로 앞부분과 뒷부분을 자른다.
a = int(form[:i])
b = int(form[i + 1:])
↓
연산자가 무엇인지 if문으로 확인하고 계산한다.
[사용된 개념 설명]
len() : 문자열의 길이를 구한다.
len(form)
form[i] : 문자열에서 i번째 문자를 가져온다.
예를 들어
form = "10+20"
이라면
form[0] → '1'
form[1] → '0'
form[2] → '+'
가 된다.
문자열 슬라이싱
문자열의 원하는 부분을 잘라낼 수 있다.
form[:i]
처음부터 i 바로 앞까지 가져온다.
form[i + 1:]
i 다음 위치부터 끝까지 가져온다.
예를 들어 10+20에서 +의 위치가 2라면
form[:2] # "10"
form[3:] # "20"
이 된다.
in : 특정 값이 안에 포함되어 있는지 확인한다.
if form[i] in "+-*/":
현재 문자가 +, -, *, / 중 하나인지 확인한다.
[코드]
form = input()
for i in range(1, len(form)):
if form[i] in "+-*/":
op = form[i]
a = int(form[:i])
b = int(form[i + 1:])
break
if op == "+":
print(a + b)
elif op == "-":
print(a - b)
elif op == "*":
print(a * b)
else:
print("%.2f" % (a / b))
[문제 풀이 2 - in + split 사용]
파이썬의 split()을 사용하면 연산자를 기준으로 문자열을 바로 나눌 수도 있다.
"10+20".split("+")
↓
['10', '20']
각 연산자가 문자열 안에 있는지 in으로 확인한 뒤 split()으로 숫자를 나누는 방법이다.
[코드]
form = input()
if "+" in form:
a, b = form.split("+")
print(int(a) + int(b))
elif "-" in form:
a, b = form.split("-")
print(int(a) - int(b))
elif "*" in form:
a, b = form.split("*")
print(int(a) * int(b))
elif "/" in form:
a, b = form.split("/")
print("%.2f" % (int(a) / int(b)))
[두 풀이 비교]
for문 + 슬라이싱은 연산자의 위치를 직접 찾고 문자열을 자르는 방식이라 문자열 인덱싱을 연습하기 좋다.
in + split()은 파이썬답게 더 짧고 간단하게 작성할 수 있다.
이 문제에서는 문자열을 다루는 방법을 연습한다면 첫 번째 풀이, 간단하게 푼다면 두 번째 풀이를 사용하면 된다.
'코딩공부 > 코드업 파이썬' 카테고리의 다른 글
| 코드업 문제집 파이썬 if~else 1228 : 비만도 측정 1 (0) | 2026.09.07 |
|---|---|
| 코드업 문제집 파이썬 if~else 1226 : 이번 주 로또 (1) | 2026.09.07 |
| 코드업 문제집 파이썬 if~else 1218 : 삼각형 판단하기 (0) | 2026.09.07 |
| 코드업 문제집 파이썬 if~else 1214 : 이 달은 며칠까지 있을까? (3) | 2026.09.06 |
| 코드업 문제집 파이썬 if~else 1212 : 삼각형의 성립 조건 (0) | 2026.09.06 |
댓글