[코드업] 성실한 개미_6098번

[코드업-기초100제] 성실한 개미_6098번


문제


링크 : BOJ

영일이는 생명과학에 관심이 생겨 왕개미를 연구하고 있었다.

왕개미를 유심히 살펴보던 중 특별히 성실해 보이는 개미가 있었는데, 그 개미는 개미굴에서 나와 먹이까지 가장 빠른 길로 이동하는 것이었다.

개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직였다. (오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.)

이에 호기심이 생긴 영일이는 그 개미를 미로 상자에 넣고 살펴보기 시작하였다.

미로 상자에 넣은 개미는 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직였다.

미로 상자의 구조가 0(갈 수 있는 곳), 1(벽 또는 장애물)로 주어지고, 먹이가 2로 주어질 때, 성실한 개미의 이동 경로를 예상해보자.

단, 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더이상 이동하지 않고 그 곳에 머무른다고 가정한다.

미로 상자의 테두리는 모두 벽으로 되어 있으며, 개미집은 반드시 (2, 2)에 존재하기 때문에 개미는 (2, 2)에서 출발한다.





풀이


  1. input을 2차원으로 받아준다.

  2. 반복문을 줘서 개미가 움직이도록 설정한다.

  3. 2일 때, 1로 둘러싸일 때, 마지막 (8,8)일 때 break를 설정한다.
    움직인 후엔 9로 바꿔준다.

  4. 공백을 두고 프린트를 해준다.

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의 특성을 제대로 알아봐야겠다.