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

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

     


    후기

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

     

     

     

     

     

    댓글