■ 문제
■ 코드 풀이
아이디어는 다음과 같습니다.
1) 처음에는 제가 문제를 이해하지 못해서 블로그에서 풀이를 찾아보니 while문과 try, except를 활용하여 다들 코드를 작성하셨더라고요. 핵심은 무한히 두 수를 더하는 반복문 속에서 다른 입력이 입력되면 종료하는 알고리즘입니다.
while True:
try:
a,b = map(int, input().split())
print(a+b)
except:
break
2) 위의 코드처럼 while문을 활용하면 정수 이외 다른 입력이 들어오면 error가 발생하여 except 문의 break가 활성화되며 반복문이 종료됩니다. 이 코드를 채점해보면 코드 길이는 105B, 시간은 48ms가 소요된 것을 알 수 있습니다.
3) 그런데 여기서 'sys.stdin을 활용해도 될 것 같은데?' 라는 생각이 들었습니다. sys.stdin은 ^z(컨트롤 z) 값이 입력되기 전까지 값을 개행 문자와 함께 계속 입력 받습니다. 입력받은 값은 split하여 int로 변환하고 두 수를 더해 출력합니다.
import sys
for i in sys.stdin:
a,b = map(int, i.split())
print(a+b)
4) 위의 코드로 채점하면 코드 길이는 76B이고 시간은 40ms로 try, except 구문을 활용한 코드보다 훨씬 효과적입니다.
참고로 sys.stdin과 관련된 내용은 아래 블로그 글을 참고했습니다.
[라이브러리] sys.stdin : 네이버 블로그 (naver.com)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 10871번 X보다 작은 수 문제 (0) | 2023.03.18 |
---|---|
[백준/Python] 10807번 개수 세기 문제 (1) | 2023.03.16 |
[백준/Python] 2439번 별 찍기 -2 (0) | 2023.03.15 |
[백준/Python] 15552번 빠른 A+B 문제 (0) | 2023.03.15 |
[백준/Python] 2480번 주사위 세개 문제 (0) | 2023.03.14 |
댓글