[SWEA|파이썬] 1954. 달팽이 숫자 (D2)

2023. 5. 20. 20:58·Problem Solving/SWEA
반응형
문제

https://tinyurl.com/2ejpvj24

 

SW Expert Academy

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

swexpertacademy.com

 

 

🐍파이썬

💡 접근방식

달팽이 숫자의 규칙은 인덱스의 방향이 j+1, i+1, j-1, i-1 순서대로 변한다는 것이다.

인덱스는 가장 처음에는 n번 바뀌고 이후부터 n-1, n-1, n-2, n-2, ..., 1번 변한다.

예를 들어 위 사진의 배열은 4x4이므로 n = 4이다. 오른쪽으로 인덱스가 이동하는 j+1은 4번, 아래쪽으로 인덱스가 이동하는 i+1은 3번, 왼쪽으로 인덱스가 이동하는 j-1은 3번, 위쪽으로 인덱스가 이동하는 i-1은 2번, 다시 j+1은 2번, i+1은 1번, j-1은 1번 인덱스값이 바뀐다.

이를 구현하기 위해 인덱스가 변하는 횟수를 변수 cnt에 저장했고 2회마다 -1씩 줄어들게 했다. cnt값만큼 for문을 돌며 해당하는 arr배열의 인덱스에 값을 저장하였다. 

T = int(input())
for test_case in range(1, T + 1):
    n = int(input())
    arr = [[0 for _ in range(n)] for _ in range(n)]
    cnt = n
    num = 1
    i, j = 0, 0
    while cnt:
        for _ in range(cnt):
            arr[i][j] = num
            j += 1
            num += 1
        j -= 1	#cnt값이 n인 경우 j값은 n-1번 늘어나야 하므로 한번은 빼준다. 이 부분 처리해주지 않으면 인덱스범위를 벗어나 에러 발생
        i += 1	#현재 i값 하나는 처리했으므로 다음 i값부터 처리할 수 있게 i+1진행
        cnt -= 1	#cnt값을 줄여 n-1회 돌도록 처리
        if cnt == 0: break	#cnt값이 0이 된다면 더이상 처리할 게 없으므로 while문 벗어남
        for _ in range(cnt):
            arr[i][j] = num
            i += 1
            num += 1
        j -= 1
        i -= 1
        for _ in range(cnt):
            arr[i][j] = num
            j -= 1
            num += 1
        cnt -= 1
        if cnt == 0: break
        i -= 1
        j += 1
        for _ in range(cnt):
            arr[i][j] = num
            i -= 1
            num += 1
        j += 1
        i += 1
    print("#{}".format(test_case))
    for i in range(n):
        for j in range(n):
            print(arr[i][j], end=" ")
        print()

 

 

다른 풀이 방법

T = int(input())
for case_num in range(1,T+1):
N = int(input())
board = [[0]*N for _ in range(N)]           # 숫자가 적힐 보드 제작 
stock = 0                                   # 사이클 마다 축적된 sum
for i in range(N//2):                       # 짝수는 딱 떨어지고 홀수는 1번 부족하게
    turn = ((N-1)-2*i)                      # turn = 사이클 변수
    for j in range(turn):                   # 매번 적기 힘들어서 넣음
        board[i][i+j] = stock + j+1                         # 시작점(1) [그림 설명]
        board[i+j][(N-1)-i] = stock + (turn)+(j+1)          # 시작점(2) [그림 설명]
        board[(N-1)-i][(N-1)-(i+j)] = stock + 2*(turn)+(j+1)# 시작점(3) [그림 설명]
        board[(N-1)-(i+j)][i] = stock + 3*(turn)+(j+1)      # 시작점(4) [그림 설명]
    stock += 4*(turn)                       # 사이클의 마지막 값을 다음 시작점에 더함
if N % 2 == 1:                              # 홀수 N의 가운데 빵꾸에
    board[N//2][N//2] = N**2                # NxN 보드에 들어갈 마지막 값, N**2 기입
print(f'#{case_num}')
for lines in range(len(board)):             # 각 라인을 출력
    print(*board[lines])                    # 리스트 양 옆 [ ]를 언팩하기 위해 * 사용

풀이 출처: https://tinyurl.com/2e7ge9ac

 

SWEA 1954. 달팽이숫자 python(파이썬)

N x N 보드 위에서 빙글빙글 돌면서 숫자를 입력해나아가자.2차 배열 리스트 위에서 자유롭게 사고할 수 있는가?요점은 다중 리스트의 좌표 개념을 얼마나 잘 써먹을 수 있는가의 문제우리가 보

velog.io

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > SWEA' 카테고리의 다른 글

[SWEA|파이썬] 9280. 진용이네 주차타워 (D3)  (1) 2023.05.21
[SWEA|파이썬] 3499. 퍼펙트 셔플 (D3)  (0) 2023.05.20
[SWEA|파이썬] 5356. 의석이의 세로로 말해요 (D3)  (0) 2023.05.20
[SWEA|파이썬] 1230. [S/W 문제해결 기본] 8일차 - 암호문3 (D3)  (0) 2023.05.19
[SWEA|파이썬] 1873. 상호의 배틀필드 (D3)  (1) 2023.05.19
[SWEA|파이썬] 13428. 숫자 조작 (D3)  (0) 2023.05.18
'Problem Solving/SWEA' 카테고리의 다른 글
  • [SWEA|파이썬] 9280. 진용이네 주차타워 (D3)
  • [SWEA|파이썬] 3499. 퍼펙트 셔플 (D3)
  • [SWEA|파이썬] 5356. 의석이의 세로로 말해요 (D3)
  • [SWEA|파이썬] 1230. [S/W 문제해결 기본] 8일차 - 암호문3 (D3)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 프로그래밍 N
        • Programming
        • C | C++
        • Java N
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    강의내용정리
    d3
    Next.js
    블로그 제작
    파이썬
    프로젝트
    자바스크립트
    알고리즘
    클론 프로젝트
    구현
    뉴렉처
    컴퓨터네트워크
    React
    리액트
    플러터
    백준
    AWS
    ZeroCho
    웹사이트
    자바
    타입스크립트
    포트폴리오
    프로그래머스
    spring boot
    mysql
    SWEA
    공식문서
    Til
    Jiraynor Programming
    bfs
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[SWEA|파이썬] 1954. 달팽이 숫자 (D2)
상단으로

티스토리툴바