시간 제한 | 메모리 제한 |
1초 | 1024MB |
문제
여중생 파댕이는 할 것이 너무 많고 공부가 어려워 정신이 없다. 오늘도 여중생 파댕이는 선생님으로부터 덧셈 문제 풀기라는 끔찍한 과제를 받았다.
파댕이는 어찌어찌 과제를 다 하는 데는 성공했지만, 과제를 채점하는 일이 매우 귀찮았다. 그래서 파댕이는 과제를 읽고 자동으로 채점해 주는 프로그램을 개발하려 한다. 파댕이를 도와주자!
이하의 문단들은 문제의 요구 조건을 자세히 기술한 것이다. 직관적인 설명을 원한다면 입력 예시와 출력 예시를 참고하라.
파댕이의 과제가 적힌 종이는 크기 3N × 8M의 행렬로 나타낼 수 있다. 종이 위에는 여러 개의 문제가 적혀 있는데, 하나의 문제가 차지하는 공간은 세로 3, 가로 8이다. 이 문제들이 세로로 N개, 가로로 M개씩 배치되어 전체 N × M개의 문제로 구성되어 있는 문제지를 이룬다. 각각의 3 × 8 공간은 본문과 여백으로 이루어져 있다. 본문은 길이 5 또는 6의 문자열로, 항상 주어진 3 × 8 행렬의 2행 2열 위치가 본문의 시작점이고, 본문은 가로로 적혀 있다. 본문은 항상 수식 a + b = c 형태로, a, b는 한 자릿수, c는 한 자리 혹은 두 자릿수다. a, b, c 중 어떤 수든지 0이 될 수도 있다. 하지만 c가 두 자릿수라면, 십의 자릿수는 0으로 주어지지 않는다. 여백은 항상 문자 . 로 주어진다.
파댕이의 과제를 채점하는 방법은 다음과 같다. 문제마다 다음과 같은 절차를 진행한다. 만약 본문에 주어진 수식이 옳다면, 여백 중 본문과 상하좌우로 인접한 모든 원소를 문자 * 로 채운다. 주어진 수식이 잘못되었다면, 문제를 포함하는 행렬의 3행 2열, 2행 3열, 1행 4열 원소를 문자 / 로 채운다.
입력
첫째 줄에 종이의 크기를 나타내는 두 정수 N, M이 공백으로 구분되어 주어진다. (1 ≤ N, M ≤ 70)
둘째 줄부터 3N개의 줄에 걸쳐 파댕이의 문제지를 나타내는 행렬이 문자열의 형태로 주어진다. 줄마다 주어지는 문자열의 길이는 8M이다.
출력
여중생 파댕이의 시험지를 채점한 결과를 나타내는 8M 길이의 문자열 3N개를 출력한다.
풀이
입력 받은 값에서 숫자를 추출해 연산 결과가 맞는지 확인한다. 연산 결과를 확인할 때, a, b는 언제나 한 자리 수이기 때문에 읽어올 데이터의 인덱스를 특정하기 쉽지만 a + b의 결과가 10 이상인 경우, c가 두 칸을 차지하게 된다. 그리고 a + b 결과와 상관 없이 파댕이가 c값을 두 칸 사용한 경우 모두를 봐야한다. 처음에는 a + b가 10 이상일 때만 c값을 두 칸 확인하도록 했으나 3 + 5 = 81이라고 써놓은 경우를 정답으로 처리하는 문제가 있어 c를 항상 두 칸 확인하고 정답 여부를 판단해야 한다.
정답 확인하고 나서 틀렸을 경우는 '/'를 정해진 위치로 바꿔 넣으면 되고, c가 두 자리 수인 경우는 *를 1칸 더 늘려서 바꿔 넣어주면 된다.
정답 코드
엄청난 개 잡탕 코드가 간다!
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
paper = [input().rstrip() for _ in range(N * 3)]
chaejum = []
for _ in range(N*3):
chaejum.append(list(paper[_]))
for n in range(N):
for m in range(M):
row = n*3+1
a = int(chaejum[row][m * 8 + 1])
b = int(chaejum[row][m * 8 + 3])
c1= int(chaejum[row][m * 8 + 5])
c2= chaejum[row][m * 8 + 6]
if (a+b > 9 and c2.isdigit() and a+b == c1*10+int(c2)) or (a+b == c1 and c2 == '.'):
if a+b > 9:
for i in range(6):
chaejum[row - 1][m * 8 + 1 + i] = '*'
chaejum[row + 1][m * 8 + 1 + i] = '*'
chaejum[row][m * 8] = '*'
chaejum[row][m * 8 + 7] = '*'
else:
for i in range(5):
chaejum[row - 1][m * 8 + 1 + i] = '*'
chaejum[row + 1][m * 8 + 1 + i] = '*'
chaejum[row][m * 8] = '*'
chaejum[row][m * 8 + 6] = '*'
else:
chaejum[row - 1][m * 8 + 3] = '/'
chaejum[row][m * 8 + 2] = '/'
chaejum[row + 1][m * 8 + 1] = '/'
for n in range(N*3):
print(''.join(chaejum[n]))