Programmers / 정수를 나선형으로 배치하기 - bfs, 달팽이 / Python 파이썬

2025. 4. 1. 17:00·coding test - python/Programmers
728x90
반응형

*문제 출처는 프로그래머스에 있습니다.

문제 제목: 정수를 나선형으로 배치하기

문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/181832

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 1 ≤ n ≤ 30

입출력 예nresult
4 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
행 \ 열0123
0 1 2 3 4
1 12 13 14 5
2 11 16 15 6
3 10 9 8 7
따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.

입출력 예 #2

  • 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
행 \ 열01234
0 1 2 3 4 5
1 16 17 18 19 6
2 15 24 25 20 7
3 14 23 22 21 8
4 13 12 11 10 9
따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.

나의 풀이

 

달팽이기본 문제. 달팽이 진행 방향을 먼저 확인 하고, d % 4 해주면 된다.

 

방문처리와 동시에 달팽이 수를 저장하면 됨

from collections import deque

def solution(n):
    result = bfs(n)
    return result

def bfs(n):
    visited = [[-1] * n for i in range(n)]
    direct = ((0, 1), (-1, 0), (1, 0), (0, -1))
    visited[0][0] = 1
    start = (0, 0)
    d = 0
    i = d % 4
    queue = deque([start])
    cnt = 1
    while queue:
        if cnt == n * n:
            break
        qy, qx = queue.popleft()
        ny = direct[i][0] + qy
        nx = direct[i][1] + qx

        if 0 <= ny < n and 0 <= nx < n and visited[ny][nx] == -1:
            cnt += 1
            visited[ny][nx] = cnt
            queue.append((ny, nx))
        else:
            d += 1
            i = d % 4
            queue.append((qy, qx))
    return visited

 

 

 

728x90
반응형

'coding test - python > Programmers' 카테고리의 다른 글

Programmers / [복습] 전화번호 목록 - 해시 / Python 파이썬  (0) 2025.04.03
Programmers / [복습] H-index - 정렬 / Python 파이썬  (0) 2025.04.02
Programmers / [복습] 할인 행사 - 슬라이딩윈도우 / Python 파이썬  (1) 2025.03.30
Programmers / [복습] 피로도 - 순열 , 그리디 / Python 파이썬  (0) 2025.03.30
백준 / 2812번 크게 만들기 - 스택 / Python 파이썬  (0) 2025.03.29
'coding test - python/Programmers' 카테고리의 다른 글
  • Programmers / [복습] 전화번호 목록 - 해시 / Python 파이썬
  • Programmers / [복습] H-index - 정렬 / Python 파이썬
  • Programmers / [복습] 할인 행사 - 슬라이딩윈도우 / Python 파이썬
  • Programmers / [복습] 피로도 - 순열 , 그리디 / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    programmers
    Python
    소수
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
Programmers / 정수를 나선형으로 배치하기 - bfs, 달팽이 / Python 파이썬
상단으로

티스토리툴바