백준

백준 10950 a + b (3번째) 파이썬

하카데미 2022. 2. 15. 08:30

1. 문제

  • 두 정수 A, B를 입력 받은 다음 A + B를 출력하시오.
  • 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 그리고 나서 계산할 두 수가 T번 주어진다.

 

2. 출제의도 파악하기

  • for문을 쓰면서 서로 다른 두 수를 연산할 수 있겠니?

 

 

3. 풀이

  • 1) 문제의 의도 대로 for문으로 풀어봄
  • 2) exec() 활용 → 3.1 백준 2739 구구단에서 본 남의 버전으로 풀어봄
T = int(input())

for n in range(N):
    a, b=map(int,input().split())
    print(a+b)

1)

T, a, b는 문자열로 된 수를 입력 받기 때문에 int로 변환해주어야 한다.

그리고 입력 받은 두 수는 공백을 기준으로 나눌 수 있기 때문에 split()을 활용한다.

a, b에는 앞의 수와 두의 수가 차례 대로 들어간다.

print() 내에서 연산 후 출력하도록 한다.

 

exec('print(eval("+".join(input())));'*int(input()))

2) exec(), eval() 활용

eval()은 파라미터로 '식'만 받을 수 있다. 예를 들면 eval('5+5')

exec()는 인자로 받은 '문자열'을 실행시킨다.

따라서 exec() 내의 문자열 'print(eval("+".join(input())));'를 실행시킨다.

eval("+".join(input())) 에서 eval 함수가 쓰였기 때문에

이 "+".join(input()) 식을 실행 시킬 것이다.

join 속에 input() 함수를 통해 두 수를 입력 받게 된다.

두 수는 join 함수의 영향을 받아 " + "로 결합하게 된다.

만약 2 3을 입력 받는다면,

2+, +3의 형태가 된다.

그럼 굉장히 신기하게도 2 + (+3)의 식이 되어 5라는 결과를 출력하게 된다.

 

사실 이때 두 수는 input()으로 받은 수라서 '문자열'이다.

그래서 "+".join(input())만 단독 실행해보면,

2+ +3의 출력 결과를 확인해볼 수 있다.

그러나 eval()은 '식'을 실행시키는 함수여서

2+ +3 을 식으로 간주하기 때문에 2+ +3을 문자가 아닌 수로 받아들였음을 알 수 있다.

 

 

4. 남의 버전 분석

  • pass

 

 

5. 출력 확인

 

'백준' 카테고리의 다른 글

백준 15552 빠른 A + B 파이썬  (0) 2022.02.17
백준 8393 합 파이썬  (0) 2022.02.16
백준 2739 구구단 파이썬  (0) 2022.02.14
백준 2884 알람 시계 파이썬  (0) 2022.02.13
백준 14681 사분면 고르기  (0) 2022.02.12