📌 문제
10951번: A+B - 4
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net

📌 내 코드
# 10951 A+B - 4
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(1, t+1):
a, b = map(int, input().split())
sum = a + b
print(sum)
💡 풀이
문제 아래에 살펴보니 빠진 조건을 찾으신 분이 있길래 당연히 테스트케이스에 대한 입력이 빠진 줄 알고, 테스트케이스를 입력받아 for문을 통해 입력받게끔 했다. 이후 이전에 풀었던 영수증 문제처럼 for문 내에서 출력을 하게끔 print()문을 들여쓰기 후 넣어줬는데, ValueError가 발생했다. 분명히 디버깅을 돌려봐도 결과가 정상적으로 나오는 걸 확인했는데 왜 에러가 나는지 이해가 되질 않았다.
그래서 풀이를 검색해봤는데, for문이 아니라 while문을 활용하는 문제였다.
for문의 경우 range()와 함께 쓰게 되면 range(시작하는 수, 마지막 수)로 해줘야 했는데, 내 코드의 경우 이 부분 때문에 테스트케이스 입력을 무조건 받아줘야 원하는 출력을 받아낼 수 있었던 거다. 즉, 테스트케이스를 알지 못하면 사용할 수 없는 코드였다.
그래서 while문을 통해 다시 코드를 짜줬다.
# 10951 A+B - 4
import sys
input = sys.stdin.readline
while True:
a, b = map(int, input().split())
sum = a + b
print(sum)
코드를 수정해서 다시 제출했는데 여전히 동일한 에러가 발생했다. while문의 경우 빠져나올 때 break를 걸어줘야 하는 걸로 알고 있는데, 그것 때문인가 싶어서 추가해봐도 별 차이가 없었다.
그래서 결국 블로그를 찾아봤는데, while문만 사용하는 게 아니라 try-except 도 함께 사용해줘야 하는 문제였다. 그래서 풀이를 참고해 다시 풀어봤다.
📌 수정 후 코드
# 10951 A+B - 4
import sys
input = sys.stdin.readline
while True:
try:
a, b = map(int, input().split())
print(a + b)
except:
break

📌 정리
for문 사용이 익숙해서 반복문 문제는 계속 for문으로만 풀어왔는데, 또다른 반복문인 while문이 있었다는 걸 깜빡하고 왜 안 되는지 고민하는 시간이 길어졌던 문제다. 또, try-except 문을 사용한 문제는 처음이라 이 부분에 대해서도 추가로 찾아봐야 할 것 같다.
try-except 구문
파이썬에서 구문 오류가 발생 할 때 해결할 수 있는 코드
try - except 구문의 기본적인 구조
1. try : 에러가 발생할 가능성이 있는 코드를 작성
2. except : 예외 발생 시 실행할 코드를 작성
try - except 구문으로 코드를 작성해두면 에러가 없을 때는 try 구문 실행 후 except를 지나쳐 그다음 코드를 계속 진행하고, 에러가 발생하면 except 구문 실행
적극적인 피드백은 언제나 환영입니다:)