풀이
- 기존 그래프 탐색처럼 방문 체크를 해서 풀려고 했지만
- 뭔가 엄청나게 꼬이는 것을 감지했다.
- 그래서 단순히 이전과 이후의 값을 비교하며 풀이.
- 다만 이 또한 엄청 꼬이는 것을 감지
- 그래서 그냥 조건을 많이 추가하더라도 하나씩 풀기로 마음 먹음
- 처음 방향은 8방향으로 다 적용했지만 불필요하다고 생각이들어
- 4방향(오른쪽 위 대각선, 오른쪽, 오른쪽 아래 대각선, 아래)으로만 탐색 후
- 해당 방향을 li에 저장 후 해당 방향으로만 탐색하고자 함.
- 여기서 이전 방향의 값이 현재 값과 같은 경우엔 중간의 값이기에
- 탐색을 하지 않도록 해야하는데 어떻게 조건처리를 해야할지 고민을 엄청나게 했다...
- 그래서 너무 복잡해진 나머지 그냥 if문을 오지게 달아서 해결했음.
- 그리고 마지막으로 sys.exit(0)을 하게 되면 실행 종료가 되어서
- flag 처리로 반복문을 탈출할 필요없다는 것을 알게 되었다.
import sys
input = sys.stdin.readline
mtx = [list(map(int,input().rstrip('\n').split())) for _ in range(19)]
result,r_mtx,flag = 0,(0,0),False
for i in range(19):
for j in range(19):
if mtx[i][j]:
li = []
for dy,dx in [[-1,1],[0,1],[1,1],[1,0]]: # 방향 찾기
if 0<=i+dy<19 and 0<=j+dx<19 and mtx[i+dy][j+dx] == mtx[i][j]:
if 0<=i-dy<19 and 0<=j-dx<19:
if mtx[i-dy][j-dx] != mtx[i][j]: li.append([dy,dx])
else:li.append([dy,dx])
for dy,dx in li:
y,x,cnt = dy+i,dx+j,1
while 0<=y<19 and 0<=x<19 and mtx[y][x] == mtx[i][j]:
y,x,cnt = y+dy,x+dx,cnt+1
if cnt == 5:
print(mtx[i][j])
print(i+1,j+1)
sys.exit(0)
print(0)
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 13777번] Hunt The Rabbit (0) | 2023.09.22 |
---|---|
[백준, 파이썬, 21313번] 문어 (0) | 2023.09.21 |
[백준, 파이썬, 13413번] 오셀로 재배치 (0) | 2023.09.19 |
[백준, 파이썬, 17086번] 아기 상어 2 (0) | 2023.09.18 |
[백준, 파이썬, 18311번] 왕복 (0) | 2023.09.18 |