알고리즘 공부/코드업 기초 100제

코드업 6098 : [기초-리스트] 성실한 개미(py)

뚜써 2022. 1. 12. 06:17

https://codeup.kr/problem.php?id=6098 

 

[기초-리스트] 성실한 개미(py)

python언어기초100제v1.0 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용

codeup.kr

 

문제 설명

 

본 문제는 python 의 빠른 기초 학습을 위해 설계된 문제로서 python 코드 제출을 기준으로 설명되어 있습니다. 
------

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

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

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

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

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

미로 상자의 구조가 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

 

풀이

 

미로 상자와 구조를 plane에 저장한다.

그리고 현재 위치에 먹이가 있는지 체크한 후, 현재 위치를 9로 표시한다.

 

이후 만약 현재 위치에 먹이가 있다면 break,

아니고 오른쪽이 벽이 아니라면 오른쪽으로 진행,

오른쪽이 벽이고 아래가 벽이 아니라면 아래로 진행,

오른쪽, 아래 모두 벽이면 break하도록 한다.

 

소스 코드

 

plane = []
for i in range(10):
    row = input().split()
    for j in range(10):
        row[j] = int(row[j])
    plane.append(row)

x, y = 1, 1
while True:
    is_food = plane[x][y] == 2
    plane[x][y] = 9
    if is_food:
        break
    elif plane[x][y+1] != 1:
        x, y = x, y+1
    elif plane[x+1][y] != 1:
        x, y = x+1, y
    else:
        break

for i in range(10):
    for j in range(10):
        print(plane[i][j],end=' ')
    print()