BackEnd/Python

『Python』백준 5335번: 화성수학 해설

흑당망고 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는 소숫점 둘째자리까지 표현한다는 뜻이다.

그리고 그 더하거나 곱하거나 뺀 결과값을 출력한다.

 


후기

그냥 너무 어려웠다...블로그 아니였으면 힘들었을 듯하다.