🔥 작성코드 (🌪️62,472kb 227ms)
T = 10
for _ in range(T):
test_case = int(input())
arr = [list(map(int, input().split())) for _ in range(100)]
di = [1, 0, 0]
dj = [0, 1, -1]
result = -1
for i in range(100):
if result != -1:
break
d = 0
ni = 0
nj = i
if arr[0][i] == 1:
while ni < 99 and 0 <= nj < 100:
ni += di[d]
nj += dj[d]
if d == 0:
if nj + 1 < 100 and arr[ni][nj+1] == 1:
d = 1
elif nj - 1 >= 0 and arr[ni][nj-1] == 1:
d = 2
else:
if nj < 0 or nj >= 100 or arr[ni][nj] == 0:
ni -= di[d]
nj -= dj[d]
d = 0
if arr[ni][nj] == 2:
result = i
break
print(f'#{test_case} {result}')
⭕ 해설
- 시작점이 1일 때마다 도착지를 찾습니다.
- 좌, 우를 계속 확인하면서 아래로 내려갑니다.
- 만약 좌, 우 중 하나가 있다면 방향을 바꿔줍니다. (십자가 모양은 없기 때문에 순서 상관없이 확인해도 됨)
- 좌, 우로 가다가 양쪽이 막혀있거나, 갈 수 없는 길이라면 내려갑니다.
- 끝 지점에 가면 while문이 종료 됩니다.
- 만약 2를 찾았다면 시작점을 결과에 저장해주고 출력해줍니다.
🚨 그냥 끝 지점에서 2를 찾아서 반대로 왔으면 한 번만 돌았으면 됐는데..
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] [S/W 문제해결 응용] 7일차 - 행렬찾기 (python) (0) | 2022.02.18 |
---|---|
[SWEA] [S/W 문제해결 기본] 5일차 - Magnetic (python) (0) | 2022.02.17 |
[SWEA 4408] 자기 방으로 돌아가기 (python) (0) | 2022.02.17 |
[SWEA 1974] 스도쿠 검증 (0) | 2022.02.15 |
[SWEA 2817] 부분 수열의 합 (0) | 2022.02.15 |