파이썬 달팽이배열 관련 질문합니다

조회수 1149회
n=4
m=3
k = {}
a=1
b=0
c=0

while c< m*n:
    for i in range(abs(m)):
        b=b+1
        c=c+1
        k[(a,b)] = c
        if c==m*n:
            break

    for i in range(abs(n-1)):
        a=a+1
        c=c+1
        k[(a,b)] = c
        if c==m*n:
            break

    for i in range(abs(m-1)):
        b=b-1
        c=c+1
        k[(a,b)] = c
        if c==m*n:
            break

    for i in range(abs(n-2)):
        a= a-1
        c=c+1
        k[(a,b)] = c
        if c==m*n:
            break

print(k)

이것을 출력하면

{(1, 1): 1, (1, 2): 2, (1, 3): 3, (2, 3): 12, (3, 3): 13, (4, 3): 14, (4, 2): 7, (4, 1): 18, (3, 1): 19, (2, 1): 10, (2, 2): 11, (5, 3): 15, (5, 2): 16, (5, 1): 17}

이렇게 나오는데 (2,3): 12로나옵니다
(2,3): 4가 원래 맞지않나요?
왜이렇게나온건가요?

1 답변

  • 달팽이 배열 숙제인 것 같네요.

    답은 아니고, 그냥 중간중간 상태를 찍어볼 수 있는 함수를 하나 만들어 봤어요. 이 함수 가지고 확인하면서, 원래 코드 수정해서 정답을 만들어 보세요.

    def print_k():
        print('-'*15)
        for i in range(1, 6):
            for j in range(1, 6):
                print('%4s'%(k.get((i,j), '')), end='')
            print()
    
    
    n=4
    m=3
    k = {}
    a=1
    b=0
    c=0
    
    while c< m*n:
        for i in range(abs(m)):
            b=b+1
            c=c+1
            k[(a,b)] = c
            if c==m*n:
                break
        print_k()
    
        for i in range(abs(n-1)):
            a=a+1
            c=c+1
            k[(a,b)] = c
            if c==m*n:
                break
        print_k()
    
        for i in range(abs(m-1)):
            b=b-1
            c=c+1
            k[(a,b)] = c
            if c==m*n:
                break
        print_k()
    
        for i in range(abs(n-2)):
            a=a-1
            c=c+1
            k[(a,b)] = c
            if c==m*n:
                break
        print_k()
    
    #print(k)
    print_k()
    
    ---------------
       1   2   3
    
    
    
    
    ---------------
       1   2   3
               4        
               5
               6
    
    ---------------
       1   2   3
               4
               5
       8   7   6
    
    ---------------
       1   2   3
      10       4        
       9       5        
       8   7   6        
    
    ---------------
       1   2   3
      10  11  12
       9       5
       8   7   6
    
    ---------------
       1   2   3
      10  11  12
       9      13
       8   7  14
              15
    ---------------
       1   2   3
      10  11  12
       9      13
       8   7  14
      17  16  15
    ---------------
       1   2   3
      10  11  12
      19      13
      18   7  14
      17  16  15
    ---------------
       1   2   3
      10  11  12
      19      13
      18   7  14
      17  16  15
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)