본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

1954. 달팽이 숫자 (코딩테스트, SW Expert Academy)

by 령과 2022. 4. 16.

문제

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

 

SW Expert Academy

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

swexpertacademy.com

나의 코드

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1,T+1):
    print(f"#{test_case}")
    target = int(input())
    
    result = [[0]*target for i in range(target)]
    way = [[0,1], [1,0], [0,-1], [-1,0]]
    way_idx= 0
    point = [0,0]   
    
    for value in range(1,target*target+1):
        result[point[0]][point[1]] = value
        tmp_x, tmp_y = point[0]+way[way_idx][0], point[1]+way[way_idx][1]
        if min(tmp_x,tmp_y)<0 or max(tmp_x,tmp_y)>=target or result[tmp_x][tmp_y] !=0:
            way_idx = (way_idx+1)%4
            tmp_x, tmp_y = point[0]+way[way_idx][0], point[1]+way[way_idx][1]
        point[0], point[1] = tmp_x, tmp_y
    
    for i in result:
        print(" ".join(map(str,i)))

 

다른 글에서 달팽이문제를 재귀로 해결한 적이 있다.

https://lyeong-gwa.tistory.com/14?category=942910 

 

달팽이 배열 만들기 (재귀함수사용)

목표 : 대부분 한 번쯤은 봤을 달팽이 배열을 출력하는 함수를 코딩 코딩테스트를 볼 때 기본적으로 구현할 필요가 있는 부품으로 사용되는 것을 종종 보았다. 단순히 구현할 수 있었으나 막상

lyeong-gwa.tistory.com

하지만 numpy를 사용한다는 점이 마음에 들지 않았고 시간이 필요한 코딩테스트에서 해당 달팽이 구현 코드는 복잡하여 쓰기 힘든 문제가 있다고 생각한다.

 

그래서 단순하게 구현할 수 있는 버전을 생각하여 작성해보았다.

 

-----------------------------------------------------------------------------------------------------------------------------------당황한 점, 보완할 점

 

1. " ".join(map(str,i))

리스트 값들을 문자열로 출력하는 코드 : 오랫동안 안쓰니 잊어버린 코드(검색해서 확인)

댓글