문제
성실한 개미는 개미굴에서 나와 먹이까지 가장 빠른 길로 이동한다.
개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직였다.
(오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)
미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다.
미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.
미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.
입력
10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.
출력
성실한 개미가 이동한 경로를 9로 표시해 출력한다.
입력 예시
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 1 0 1
1 0 0 0 0 1 2 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
출력 예시
1 1 1 1 1 1 1 1 1 1
1 9 9 1 0 0 0 0 0 1
1 0 9 1 1 1 0 0 0 1
1 0 9 9 9 9 9 1 0 1
1 0 0 0 0 0 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
나의 풀이
1. 개미map 리스트 형식으로 입력 받기
ls = []
for _ in range(10):
row = list(map(int, input().split()))
ls.append(row)
2. 개미 방문 지도 그리기
x, y = 1, 1
while True:
ls[x][y] = 9
if ls[x][y+1] == 0:
y += 1
elif ls[x][y+1] == 1:
if ls[x+1][y] == 1:
break
elif ls[x+1][y] == 2:
ls[x+1][y] = 9
break
x += 1
elif ls[x][y+1] == 2:
ls[x][y+1] = 9
break
3. 출력 예시와 동일한 출력
for a in range(10):
for b in range(10):
print(ls[a][b], end=' ')
print('')
'코딩 어쩌구 > 코딩테스트' 카테고리의 다른 글
[코드업] 1805번 입체기동장치 생산공장 (0) | 2021.11.09 |
---|---|
[이것이 코딩테스트다] 1. 출제 경향 분석 및 파이썬 문법 (1) | 2021.11.08 |
[코드업] 6097번 설탕과자 뽑기 (0) | 2021.11.08 |
[코드업] 6096번 바둑알 십자 뒤집기 (0) | 2021.11.08 |
[코드업] 기초 100제 (6001~6095) (0) | 2021.11.08 |