-
[파이썬/Python] 백준 10950번(A+B - 3) 단계별로 풀어보기 + [for문 대신 while문 써보기, 더하는 값 잘못 입력했을 때 원점으로 돌리기]깜빡의 취미/파이썬을 합니다. 2021. 9. 5. 11:30728x90
문제는 다음과 같다.
# 필요한 지식
for문의 기본, 그리고 map(int, input().split())에 대해 알고 있어야 한다. (아래의 링크 두 개를 참고해주시면 됩니다)
반응형# 답안 예시
[답안 예시1] T = int(input()) for i in range(1,T+1): A,B = map(int, input().split()) print(A + B)
우선 테스트 케이스의 개수를 지정해야 한다. 첫 줄에 T를 input 함수를 이용하여 지정하면 된다. 이때 T는 개수이므로, int 함수를 이용하여 정수형으로 지정해 준다.
테스트 케이스의 개수만큼 입력과 출력이 이루어져야하기 때문에, for문과 range 함수를 활용하면 된다. 이때 1부터 T까지 세면 자연스레 테스트 케이스의 개수가 될 것이다. 따라서 range(1, T+1)이라 설정해 준다.
물론 (개수만 따져 보면) 1부터 T라는 말은 0부터 T-1이라는 말로도 풀이 가능하기 때문에, range(0,T)라고 적어 주어도 결과는 같다. range 함수 특성상 앞의 0을 생략할 수 있으므로, [답안 예시2]와 같이 range(T)라고 바꾸어 적어볼 수 있다.
[답안 예시2] T = int(input()) for i in range(T): A,B = map(int, input().split()) print(A + B)
각각의 경우 두 수를 한 번에 입력 받아 출력해야 하기 때문에, split 함수에 의해 나뉠 두 수를 A, B로 각각 지정해 준다. 이 A, B를 이용해 A+B를 구하여 출력하면 답, 완성이다.
이미 기존의 정보들을 바탕으로 충분히 풀어낼 수 있는 문제라, 앞선 단계별로 풀어보기를 접해 보셨다면 방문하지 않으셔도 충분히 풀 수 있으셨으리라 믿습니다. 그냥 돌아가시기에 재미없을 것 같아서, while문을 이용한 식도 함께 올려봅니다.
[답안은 맞는데 의도에는 안 맞는 녀석1] T = int(input()) t =0 while T > t: t += 1 A,B = map(int, input().split()) print(A+B)
우선 t를 설정하여 while문에서 활용할 수 있게 해주고, t값을 1씩 늘려 t가 T보다 작을 때까지만 값을 출력해주는 간단한 식이다. t가 T에 도달하는 순간이 마지막 루프이다.
위와 같이 식을 짰을 때, 느꼈던 불편함 중 하나는 입력값을 잘못 치게 되었을 때 바로 프로그램이 종료된다는 점이었다. 그래서 마지막으로, 혹시 발생할 수 있는 오류들을 바로잡아주는 방법도 함께 올려본다. 우선 식은 아래와 같다.
T = int(input()) def x(): t =0 while T > t: A,B = map(int, input().split()) print(A+B) t += 1 while 1: try: x() break except: print("프로세스를 다시 시작합니다.") continue
앞서 보여드리지 않은 부분에 대한 설명을 추가하겠다.
def x():
테스트 개수를 지정하는 줄을 제외한, 답안 예시에 사용했던 모든 문장을 옮기면 된다(for문, while문 상관 없음). def를 이용하면 함수를 지정할 수 있으며, 현재 답안 예시 전체를 x()라는 함수로 지정해 둔 상태라고 이해하면 된다.
while 1:
오류를 잡아 내었을 때 다시 원래의 식으로 돌아가기 위한 장치라고 생각하면 된다. 오류가 발생할 지 안 할지를 미리 예측할 수 없는 상황이므로, 무한루프로 우선 지정해 두었다. 참고로 T(테스트 케이스)가 지정된 이후 while문이 시작되기 때문에, 오류가 발견된 이후 따로 T를 다시 설정할 필요가 없다. 바로 A와 B를 지정하는 단계로 넘어간다는 뜻이다.
try:
x()
breaktry... except... 구문을 이용하면 특정 오류에 특정 행동을 하도록 만들어낼 수 있다. 위의 식은 x()를 실행해 주세요.라는 의미이다. 아까 무한루프를 설정해 두었기 때문에, 만일 오류가 발견되지 않을 때를 대비하여 break를 꼭 적어 두어야 한다.
except:
print("프로세스를 다시 시작합니다.")
continue물론 A,B의 개수와 관련된 오류는 ValueError이지만, 혹시 추가로 존재할 오류를 대비하여 except 구문에 특정 오류를 지정하지는 않았다(except 오류: 와 같이 작성했다면, 오류 부분에 작성해둔 오류에만 반응하게 된다).
어찌 되었든 오류가 발견되면 프로세스를 다시 시작합니다라는 문구가 뜬 후 while문의 처음으로 돌아가게 된다(continue를 print와 동일선상에 두더라도 큰 문제는 없다.
마지막으로 실제 프로그램이 작동하는 모습을 보여드린 후 글을 마치고자 한다. 입력하기로 한 변수의 개수를 맞추지 못하면 오류가 발생하며, 이 오류를 잡은 후 프로그램을 다시 원점으로 돌려주는 방식이다.
의식의 흐름대로 적어 내려가다보니, 생각보다 더 두서가 없었던 것 같습니다. 작은 기능 하나를 추가하는데 분량이 거의 두 배가 되는 걸 보면, 그냥 입력할 때 정신 차리는 게 좋지 않을까... 싶기도 합니다. 방문 진심으로 감사드리고, 혹시라도 제 글이 더 나아질 방향이 있다면 허심탄회하게 댓글로 남겨 주시면 감사하겠습니다. 꼭 반영하겠습니다. 감사합니다.
'깜빡의 취미 > 파이썬을 합니다.' 카테고리의 다른 글
[파이썬/Python] 텍스트 RPG(1): 이름, 기본 스텟 (0) 2021.09.19 [파이썬/Python] 백준 8393번(합) 단계별로 풀어보기 + ['+=' 에 관한 조금 더 자세한 설명] (2) 2021.09.12 [파이썬/Python] 백준 2739번(구구단) 단계별로 풀어보기+ [범위 넘어갈 때 오류 만들기 + 구구단 그 너머를 위한 식] (0) 2021.08.29 [파이썬/Python] for문 기본, 그리고 range 함수 (3) 2021.08.29 [파이썬/Python] 백준 2884번(알람 시계) 단계별로 풀어보기 (0) 2021.08.22