[코드업] 성실한 개미_6098번
[코드업-기초100제] 성실한 개미_6098번
문제
링크 : BOJ
영일이는 생명과학에 관심이 생겨 왕개미를 연구하고 있었다.
왕개미를 유심히 살펴보던 중 특별히 성실해 보이는 개미가 있었는데, 그 개미는 개미굴에서 나와 먹이까지 가장 빠른 길로 이동하는 것이었다.
개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직였다. (오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)
이에 호기심이 생긴 영일이는 그 개미를 미로 상자에 넣고 살펴보기 시작하였다.
미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다.
미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.
단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.
미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.
풀이
-
input을 2차원으로 받아준다.
-
반복문을 줘서 개미가 움직이도록 설정한다.
-
2일 때, 1로 둘러싸일 때, 마지막 (8,8)일 때 break를 설정한다.
움직인 후엔 9로 바꿔준다. -
공백을 두고 프린트를 해준다.
data = []
for i in range (10):
data.append(list(map(int, input().split())))
x, y = 1, 1
data[x][y] = 9
if data[x][y] != 2:
while True:
if data[x][y+1] == 1 and data[x+1][y] == 1:
break
if x == 8 and y == 8:
break
y = y + 1
if data[x][y] == 1:
y = y - 1
x = x + 1
if data[x][y] == 2:
data[x][y] = 9
break
data[x][y] = 9
for i in range (10):
for j in range(10):
print(data[i][j], end=" ")
print()
실수했던 점
파이썬 문법의 이해 부족,
data의 이중 배열을 초기화 하는 방법이랑 input받는 방법도 동일하게 생각했다.
data = []
for i in range (10):
data.append(list(map(int, input().split())))
map 자체는 객체이다. x = map(int, input())을 할 경우, 프린트를 하면 객체 : <map object at 0x000002370E92B5E0> 가 나온다.
하지만 x, y = map(int, input().split())을 하거나 x = list(map(int, input())) 을 할 경우,
제대로 된 데이터가 출력된다.
map의 특성을 제대로 알아봐야겠다.