안경잡이 구루루

백준 10951( A+B-4 ) [ python ]( 오답노트 ) 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 10951( A+B-4 ) [ python ]( 오답노트 )

구루루(gururu) 2020. 5. 16. 22:00
반응형

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.


나( 오답 ):

while True:
    a,b = map(int, input().split())
    0<a and 10>b
   

    if a == False and b == False:
        break
    print(a+b)

오답으로 쓴 코드는 위와 같다

2020/05/16 - [파이썬(Python)/문제풀이(백준,BaekJoon)] - 백준 10952 ( A+B -5 )[ python ]

같은 종류의 문제인 위 문제는 종결조건이 명확히 존재하지만 이 문제의 경우 종결조건이 명확히 나오지 않았다.

그래서 값이 존재 하지 않는다는 의미인 False를 사용했지만 런타임 에러가 일어났다.

값이 입력되지 않으면 while문이 종결되는 방법을 구하려고 했다.


나( 정답 )

while True:
    try:
        a, b = map(int, input().split())
        0<a and b<10

        print(a+b)
    except:
        break

완성된 코드는 위와 같다. 

내가 틀렸던 원인들을 인터넷에서 검색하며 분석해본 결과를 먼저 알 필요가 있다.

어떤 코드가 동작하는 과정에서, 오류가 발생할 수도 있고 발생하지 않을 수도 있다.  이 때 오류를 컨트롤하기 위해 사용하는 것이 try-except-else-finally 구문이다.

파이썬에서 정보를 입력받을때 어디가 끝인지를 확인하는 기능이 자체적으로 없어서 만약에 예외처리를 하지 않는다면 이 문제에서는 계속적으로 인풋을 받는다.

몇개의 테스트 케이스가 주어졌는지 알 수 없는 경우 입력을 EOF까지 받으면 된다.

(출처: https://woogong2.tistory.com/36 [UC공대 출신 미국에서 살아남기])

(출처:https://www.acmicpc.net/board/view/43198)

(출처: https://sozerodev.tistory.com/30 )

그래서 예외처리를 사용해서 문제를 접근해야한다.

while True:
    try:
        a, b = map(int, input().split())
        0<a and b<10
        print(a+b)

try 부분에는 실행할 부분의 코드를 입력한다.  

입력값 a,b를 빈칸을 기준으로 받고 각각 조건에 맞게 범위를 설정해 준다.

 

    except:
        break

except 부분에는 예외가 일어났을 때  처리하는 코드를 입력한다. 

여기에 경우 입력값이 없을 경우 while 반복문을 빠져나온다.


다른사람:

https://sinb57.tistory.com/entry/Python-3-10951-A-B-4

import sys

for line in sys.stdin:

    a,b = map(int, line.split())

    print(a+b)

완성된 코드는 위와 같다.

sys 모듈을 inport해서 문제를 해결했다.

왜냐하면 sys.stdin은  ^Z를 입력받으면 종료해주기 때문에 위 처럼 사용했다. 

 

반응형