Home 성실한 개미 리스트
Post
Cancel

성실한 개미 리스트

출처: codeup 6098 (파이썬 기초 100문제)

문제는 다음과 같습니다. 10 x 10 행렬이 있는데 (2,2) 좌표에서 시작해서 무조건 오른쪽으로 출발을하는데

벽을 만나면 밑으로 내려오게 되고 아니면 다시 오른쪽으로 이동을 하는데 먹이(2)를 만나게 되면 종료 합니다.

뭔가 깔끔하게 만들 수 있을거 같은데 정확히 어떤 케이스가 나오는지 모르니 조건을 그때그때 생각해서 집어넣었습니다.

1
2
3
d=[0]*10
for i in range(10):
    d[i]=list(map(int, input().split()))

예전에 쓰던거를 다시 재탕했습니다. 일단 10x10 행렬이라고 했으니 10번 반복하면서 리스트를 받아서 2차원 배열을 만들어 줍시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x=1
y=1
while True:
    if d[x][y]==0:
        d[x][y]=9
        y+=1
    elif d[x][y]==1:
        y-=1
        x+=1
    else:
        d[x][y]=9
        break
    if (x==8)and(y==8):
        d[x][y]=9
        break

전체 구조를 while을 무한반복을 돌리고 조건을 맞으면 나오게 했습니다.

일단 첫번째 좌표 x,y가 0에서 시작을 하는데 그 자리가 0이라면 9로 바꾸어 주고 y를 +증가시켜줍시다. 그러면 오른쪽으로 이동하겠지요 그런데 벽(1)을 만나게 되면 다시 왼쪽으로 한칸 이동으로 x를 증가해서 내려갑시다.

여기서는 만나는 숫자가 1이거나 0이거나 2일것인데 만나는 숫자가 2라면 이것도 9로 바꿔주고 탈출합시다.

또는 9,9에 오게되면 더이상 이동할 곳이 없는 곳 까지 오게 되었다는 의미이니 그 자리를 9로 바꾸어주고 탈출하게 했습니다.

마지막 출력 부분은 생략

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
d=[0]*10
for i in range(10):
    d[i]=list(map(int, input().split()))

x=1
y=1
while True:
    if d[x][y]==0:
        d[x][y]=9
        y+=1
    elif d[x][y]==1:
        y-=1
        x+=1
    else:
        d[x][y]=9
        break
    if (x==8)and(y==8):
        d[x][y]=9
        break
        
for i in range(10):
    for j in range(10):
        if j!=9:
            print(d[i][j],end=' ')
        else:
            print(d[i][j])
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.