본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA 1954] 달팽이 문제

by char_lie 2023. 2. 13.
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

달팽이 문제

숫자를 왼쪽위부터 쭉 도는 형태의 모양으로 만들어주는 문제

100% 내 생각으로 풀었는가?
→ X

문제를 제대로 시도하기 전에 수업에서 설명해주셔서 무난하게 풀 수 있던 문제

 

내가 푼 정답 코드

T = int(input())
di = [0,1,0,-1]
dj = [1,0,-1,0]
 
for case in range(1,T+1):
    N = int(input())
    n = [[0]*N for _ in range(N)]
    move = 0 # 진행방향
    i = j = 0 # 숫자를 쓸 칸의 인덱스
    for k in range(1,N*N+1):
        n[i][j] = k
        ni, nj = i+di[move], j+dj[move]
        if 0 <=ni< N and 0<= nj < N and n[ni][nj] == 0:
            i, j = ni, nj
        else :
            move = (move + 1) % 4 #방향전환
            i, j = i + di[move], j+dj[move]
    print(f"#{case}")
    for x in n :
        print(*x)

사실 혼자 풀었으면 쉽게 생각해내지 못했을거 같단 생각이 든다. 특히나 방향을 고려해서 돌아가게 짜는 방식을 미로 찾기 등보다 생각해내는게 더 어렵지 않았을까 라는 생각을 했다.

반응형

느낀점

확실히 아이디어를 생각해내는게 어려웠을거 같은 문제. 특히 반환전환에 대해서 이렇게 코드를 짜는 방법도 있구나 하고 수업 들으면서 많이 감탄했던거 같다.

내가 혼자 짜려했으면 이동 방식을 고려하는게 아닌 단순히 for문을 통해서 어떻게든 해결하겠다고 발악했을거 같은데 확실히 깔끔하고 이해하기도 쉽게 코드를 짜는 과정이 굉장히 흥미로웠던 문제였다.

반응형

댓글