아무튼 개발
article thumbnail
반응형

코드업 파이썬 6098번 풀이입니다.

드디어 코드업의 마지막 문제 ✨

 

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

 

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

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

codeup.kr

 

 

문제

 

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

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

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

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

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

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

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

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

 

 

코드

 

p = []

for i in range(10):
    p.append(list(map(int, input().split())))

x = 1  
y = 1

while True:
    if (p[x][y] == 0):
        p[x][y] = 9
    elif (p[x][y] == 2):
        p[x][y] = 9
        break  

    if (x==8 and y==8) or (p[x][y+1] == 1 and p[x+1][y] == 1):
        break

    if p[x][y+1] != 1 : 
        y += 1
    elif p[x+1][y] != 1 :
        x += 1

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

 

 

코드 풀이

 

1) 개미굴 리스트 변수 p 생성 및 입력값 받기

 

p = []

for i in range(10):
    p.append(list(map(int, input().split())))

 

 

 

2) 개미 이동경로 설정하기

출발 지점이 (2, 2)이므로 인덱스는 1번이다. 좌표 (1, 1)은 인덱스 0번이기 때문이다.

(모범답안은 첫 번째 칸을 (1, 1)로 설정했지만 저는 바로 (0, 0)부터 설정했습니다.)

따라서 x와 y에 출발 지점 인덱스 값인 1을 주었다.


x = 1  
y = 1

while True:
    if (p[x][y] == 0):
        p[x][y] = 9
    elif (p[x][y] == 2):
        p[x][y] = 9
        break  

    if (x==8 and y==8) or (p[x][y+1] == 1 and p[x+1][y] == 1):
        break


    if p[x][y+1] != 1 : 
        y += 1
    elif p[x+1][y] != 1 :
        x += 1

 

while문을 사용하여 이동 값을 주었다.

값이 0일 때는 갈 수 있는 것이고 2일 때는 먹이가 있는 것이므로 문제에 따라 9라는 결괏값을 준다.

먹이가 있을 때를 포함해 끝나는 지점 또는 벽이 있을 때(1) break를 준다

 

그리고 문제에 따르면 개미가 오른쪽으로 먼저 갔다가 막히면 내려가는 것이기 때문에

마지막의 if문 우선순위에서도 오른쪽으로 가는 게 먼저 나와야 한다. !!!★

이 부분을 생각 없이 반대로 써서 틀린 부분 찾느라 힘들었다 ㅎ..

그래서 벽이 없어 움직일 수 있을 때에는 각각의 경우에 따라 인덱스 값을 1씩 추가하게 하였다.

 

 

 

3) 결과 출력하기


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

 

기존의 문제들과 마찬가지로 줄에 따라 출력을 해주면 된다.

(출력은 6097번 문제에서 설명하였으니 참고 바란다.)

 

 

출처 : 코드업 6098번

 

반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...