Home [Python] 코드업 6098 : 성실한 개미
Post
Cancel

[Python] 코드업 6098 : 성실한 개미

Problem

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

Solution

오답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
course = []

for i in range(10):
    course.append(list(map(int, input().split())))
course[1][1] = 9
x, y = 1, 1
while not(course[x][y+1] == 1 and course[x+1][y] == 1):
    if course[x][y+1] == 0:
        y += 1
    else:
        x += 1
    if course[x][y] == 2:
        course[x][y] = 9
        break
    course[x][y] = 9

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

위 코드를 실행하니 문제에 주어진 예시는 정상출력됐는데,

1
2
3
4
5
6
7
8
9
10
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 0 0 1 0 0 1
1 0 0 0 0 0 1 0 0 1
1 0 0 0 0 0 1 0 0 1
1 0 0 0 0 0 0 2 0 1
1 1 1 1 1 1 1 1 1 1

위와 같은 테스트케이스가 입력됐을 때는 다음과 같은 에러 메시지가 출력됐다.

1
2
3
4
Traceback (most recent call last):
  File "code.py", line 7, in <module>
    while not(course[x][y+1] == 1 and course[x+1][y] == 1):
IndexError: list index out of range

알고보니 개미가 길을 따라 가다가 먹이가 바로 아래에 있으면 while-else에 들어가서 아래로 이동한 뒤 정상적으로 종료되지만, 먹이가 바로 오른쪽에 있는 경우 while-if에 들어가야하지만 들어가지 못한다. 조건을 0(길이 비어있는 경우)만 설정하고 2(길에 먹이가 있는 경우)는 설정하지 않았기 때문이었다.

따라서 오른쪽이 아닌 아래로 내려가게 되고 제일 밑줄로 이동한 경우 while문의 course[x+1][y]는 리스트에서 존재하지 않는 인덱스이므로 위와 같은 에러가 발생한 것이다.

이 문제를 해결하기 위해 코드를 다음과 같이 수정하였다.

정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
course = []

for i in range(10):
    course.append(list(map(int, input().split())))
course[1][1] = 9 # 시작지점을 9로 변경
x, y = 1, 1
while not(course[x][y+1] == 1 and course[x+1][y] == 1):
    if course[x][y+1] == 0 or course[x][y+1] == 2: # 추가한 조건(오른쪽에 먹이가 있는 경우)
        y += 1
    else:
        x += 1
    if course[x][y] == 2: # 먹이를 발견한 경우
        course[x][y] = 9
        break
    course[x][y] = 9

# 결과 출력
for i in range(10):
    for j in range(10):
        print(course[i][j], end=' ')
    print()

Memo

위 코드는 개미가 오른쪽과 아래가 벽이 아닌 경우 이동하면서 각 좌표에서의 리스트의 값을 9로 변경하는 과정을 구현한 것이다. while문을 돌면서 개미가 먹이를 발견하게 되거나 막다른 곳에 도달하게 되면 반복문이 종료되어 결과를 출력한다.

This post is licensed under CC BY 4.0 by the author.

[Python] 코드업 : 6097 : 설탕과자 뽑기

WSL2 종료 후 Vmmem이 Windows의 메모리를 차지하는 문제