[Silver IV] 네모네모 시력검사 - 18242 (python)
애드 혹, 구현
네모네모 안과에서는 아래와 같은 방법을 이용하여 시력검사를 진행한다.
격자가 그려진 흰색 바탕의 N × M 직사각형의 내부에 한 변의 길이가 3보다 큰 홀수이며 행 또는 열에 평행인 단 하나의 정사각형의 테두리를 색칠한다.
이때 정사각형의 네 변 중 한 변의 가운데는 색칠하지 않으며 이 색칠하지 않은 변이 정사각형의 어느 변인지를 맞추어 보라는 것으로 시력 검사를 진행한다.
예를 들어 N = 7, M = 8 직사각형 내부에 조건에 맞는 다음과 같은 정사각형을 그릴 수 있다.
왼쪽 예제의 경우 색칠하지 않은 변이 오른쪽, 오른쪽 예제의 경우 아래쪽에 있는 것을 알 수 있다.
조건에 맞는 입력만 주어질 때, 모든 시력 검사 데이터를 통과하는 프로그램을 작성해보자.
첫 번째 줄에 직사각형의 높이 N과 너비 M이 주어진다. (5 ≤ N, M ≤ 100)
두 번째 줄부터 N개의 줄에 길이가 M인 문자열이 주어진다. i+1번째 줄의 j번째 문자가 ‘ # ’ 일 경우 색칠한 칸, ‘ . ’ 일 경우 색칠하지 않은 칸을 나타낸다.
문제에서 제시한 조건에 맞는 입력만 주어진다.
정사각형의 색칠하지 않은 한 변이 왼쪽, 오른쪽, 위쪽, 아래쪽일 때에 따라 각각 LEFT, RIGHT, UP, DOWN을 출력한다.
코드
n, m = map(int, input().split())
arr = []
s =None
c= 0
for i in range(n):
a = list(input())
arr.append(a)
if '#' in a and not s:
s = (i, a.index('#'))
c = a.count('#')
if c%2 == 0:
print('UP')
else:
if arr[s[0]+c//2][s[1]] == '.':
print('LEFT')
elif arr[s[0]+c-1][s[1]+c//2] == '.':
print('DOWN')
else:
print('RIGHT')
1. # 의 시작 지점과 해당 줄의 #의 개수를 저장한다.
2. # 은 항상 홀수이며 짝수일 경우 색칠하지 않는 칸이 있는 것이다.
3. 왼쪽, 오른쪽, 아랫쪽의 중간을 확인하고 색칠되지 않는 공간이 있을 경우를 확인한다.