문제 : https://www.acmicpc.net/problem/18221
백준알고리즘을 돌아다니다 알 수 없는 아우라를 풍기는 제목을 보고 해당 문제를 풀게되었다. 문제를 보고 단순 구현문제여서 다른 문제를 풀까하였지만, 최근 kaggle competition(brain MRI image classification)을 준비하면서 시간분배를 잘못하여 오늘은 간단한 문제를 풀기로 하였다.
성규가 교수 몰래 땡땡이 치는데 상황조건은 다음과 같다.
1. 교수와 성규가 축과 평행한 일직선상에 있다면 교수와의 거리 상관없이 교수와 성규 사이에 학생 3명 이상
2. 축과 평행한 일직선상에 없다면 직사각형을 그리고 해당 사각형 내에 학생 3명 이상 및 거리는 5 이상
위 조건을 그대로 사용하여 구현만 하면된다. 간단하므로 따로 코드에 대한 해석은 하지 않겠다.
n = int(input())
board = []
gyu = None
professor = None
for i in range(n):
temp = list(map(int,input().split()))
for j in range(n):
if temp[j]==2:
gyu = (i,j)
elif temp[j]==5:
professor = (i,j)
board.append(temp)
def check(x1,y1,x2,y2):
cnt = 0
x_min,x_max = min(x1,x2),max(x1,x2)
y_min,y_max = min(y1,y2),max(y1,y2)
for y in range(y_min,y_max+1):
for x in range(x_min,x_max+1):
if board[y][x]==1:
cnt+=1
if cnt>=3 and (x1-x2)**2 + (y1-y2)**2 >=25:
if x1==x2 or y1==y2:
return True
else:
if (x1-x2)**2 + (y1-y2)**2 >=25:
return True
else:
return False
y1,x1 = gyu
y2,x2 = professor
answer = check(x1,y1,x2,y2)
print(int(answer))
사실 필자는 엄청 틀렸었다. 왜냐하면 조건을 빼먹어서 70퍼에서 계속 틀렸기 때문이다. 문제가 쉽다고 대충읽지 말고 꼼꼼하게 읽기!!