-
『Python』백준 5335번: 화성수학 해설BackEnd/Python 2022. 1. 18. 20:57
https://www.acmicpc.net/problem/5355
5355번: 화성 수학
겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산
www.acmicpc.net
아래는 참고한 코드이다..(사실 배낀거나 다름없지만)
https://island-developer.tistory.com/94
문제 해석
문제를 해석
겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산자이다. 따라서, 화성에서는 수학 식의 가장 앞에 수가 하나 있고, 그 다음에는 연산자가 있다.
스토리는 무시하고 해석하자면
@는 X3
%는 +5
#은 -7이다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 줄에는 화성 수학식이 한 줄에 하나씩 주어진다. 입력으로 주어지는 수는 정수이거나 소수 첫째 자리까지 주어지며, 0 이상 100 이하이다. 연산자는 최대 3개 주어진다.
해석을 하자면
첫번째 줄에 계산하고 싶은 양(즉 몇번 계산을 할건지)를 적으면 그 갯수만큼 계산을 할 수 있다.
그 다음부터는 본인이 원하는 계산을 하면된다.
입력 예시
1 3 @
이렇게 입력을 하면 계산은 한줄만 하겠다는 뜻이고 3 @은 3 곱하기 3을 말하는 것이다.
결과는 다음과 같이 나와야 한다.
9
해설
T = int(input()) for i in range(T): a = list(map(str, input().split())) result = float(a[0]) for j in range(1, len(a)): if a[j] == '@': result *= 3 elif a[j] == '%': result += 5 else: result -= 7 print('%0.2f' % result)
코드는 우선 다음과 같습니다.
이제 부분부분 설명을 하자면
T = int(input())
문제에서 처음 적는 숫자를 케이스 갯수 T라고 했으니 T라는 변수를 만들어준다.
그리고 T라는 변수로 int(정수형)으로 입력을 받는다.
for i in range(T):
for문으로 반복을 함과 동시에 i라는 변수를 만들어 준다.
range는 숫자 리스트를 자동으로 만들어주는 함수이다.
우리는 입력 받는 숫자가 있음으로 받는 숫자 미만 만큼
즉 3을 받으면 0, 1, 2 이렇게 리스트를 만들고 그 만큼 반복한다는 소리이다.
이제 i에는 그 리스트가 순서대로 대입된다.
a = list(map(str, input().split()))
a라는 변수를 만들어 주고
list를 만들어서 map으로 입력 받은 값을 str(문자열)로 바꿔준다.
그 뒤 input().split()으로 값을 입력을 여러개 받는다.
result = float(a[0])
result를 에다가
float(실수)형으로 바뀐 a의 리스트의 첫번째 값을 저장한다.
즉 숫자를 입력했을때 문자열로 바뀌고 그 문자열이 다시 실수형(소숫점까지 나옴)으로 바뀐다.
for j in range(1, len(a)): if a[j] == '@': result *= 3 elif a[j] == '%': result += 5 else: result -= 7
이건 좀 기네요...ㅋㅋ
for j in range(1, len(a)):
일단 for안에서 또 for반복을 합니다.
이번에는 j라는 변수를 만들어주고 range(리스트)를 만들어 줍니다.
1부터 a의 길이 만큼 즉 뒤에 입력한 갯수 크기 만큼이다.
어짜피 리스트는 0부터 시작하기 때문에
처음에 적는 숫자 부분은 포함이 되지 않고
그 뒤에 입력하는 연산자의 갯수만큼 반복을 하는 것이다.
if a[j] == '@': result *= 3
a는 입력받은 값이다.
예를들어
3 3 @
이라고 할때
맨위에 3은 제외하고
밑에 3 @에 대한 부분을 말하는 것이다.
예시 중 a에서 첫번째(0번째는 숫자니까)인 @ 부분을 말한다.
해당 부분이 @일 경우 result에다가 X(곱하기) 3을 저장한다.
elif a[j] == '%': result += 5
else즉 아닐경우 + if 가 합쳐진 부분이다.
아닌데 만약 %일경우에는
위 처럼 result에다가 +5를 하라고 한다.
else: result -= 7
이번엔 그것도 아닐경우에는 -7을 하라고 한다.
print('%0.2f' % result)
print는 출력하는 것이고
%0.2f는 소숫점 둘째자리까지 표현한다는 뜻이다.
그리고 그 더하거나 곱하거나 뺀 결과값을 출력한다.
후기
그냥 너무 어려웠다...블로그 아니였으면 힘들었을 듯하다.