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문을 돌면서 개미가 먹이를 발견하게 되거나 막다른 곳에 도달하게 되면 반복문이 종료되어 결과를 출력한다.