[백준/파이썬] 15820번 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 15820번 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
‘테스트케이스(TestCase)’란 사용자가 제출한 코드가 옳은 답을 출력하는지 판단하기 위한 데이터다. 한 문제는 여러 개의 테스트케이스를 가지며, 문제를 ‘맞았다’는 것은 해당 문제의 모든 테스트케이스를 통과했다는 것을 의미한다. 즉, 하나의 테스트케이스라도 틀린다면 해당 문제는 틀린 것이 된다.
그림1. 실제 대회 시스템의 채점 방식을 나타내는 그림
테스트케이스 중 일부는 유저에게 공개되며, 일부는 공개되지 않는다. ‘샘플 테스트케이스’란 문제의 이해를 돕기 위해 유저에게 제공된 데이터다. 시스템이 코드를 채점할 때에는 이 외에도 공개되지 않은 ‘시스템 테스트케이스’를 통해 추가로 답을 검증한다. 따라서 유저는 코드를 작성할 때 제한 내의 모든 데이터를 고려해야 한다.
만영이는 샘플 테스트케이스만 맞으면 답을 제출하는 나쁜 버릇이 있다. 때문에 만영이의 정답률은 30%도 채 되지 않는다. …
입력 요약
첫 줄에 샘플 테스트케이스의 개수 S1과 시스템 테스트케이스의 개수 S2가 주어진다.
두 번째 줄부터 S1개의 줄에는 차례로 각 샘플 테스트케이스의 정답과 만영이의 코드가 생성한 답이 공백으로 구분되어 주어진다. 이후 S2개의 줄에 걸쳐 차례로 각 시스템 테스트케이스의 정답과 만영이의 코드가 생성한 답이 공백으로 구분되어 주어진다.
모든 테스트케이스의 정답과 만영이의 코드가 생성한 답은 -231 이상 231-1 이하의 정수이다.
출력 요약
만영이의 코드가 모든 테스트케이스에 대해 올바른 답을 생성했다면 “Accepted”를, 샘플 테스트케이스를 틀렸다면 “Wrong Answer”을, 샘플 테스트케이스는 맞았지만 시스템 테스트케이스를 틀렸을 경우에는 “Why Wrong!!!”을 따옴표 없이 출력한다.
코드
s1,s2=map(int,input().split())
f1=f2=True
for T1 in range(s1):
a,c=map(int,input().split())
if a!=c:f1=False;break;
for T2 in range(s2):
a,c=map(int,input().split())
if a!=c:f2=False;break;
if f1 and f2:print('Accepted')
elif f1:print('Why Wrong!!!')
else:print('Wrong Answer')
설명
핵심은 구현 관점에서 ‘테스트케이스(TestCase)’란 사용자가 제출한 코드가 옳은 답을 출력하는지 판단하기 위한 데이터다. 한 문제는 여러 개의 테스트케이스를 가지며, 문제를 ‘맞았다’는 것은 해당 문제의 모든 테스트케이스를 통과했다는 것을 의미한다. …를 만족하도록 로직을 구성하는 것입니다.
코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.
경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.
댓글남기기