새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[프로그래머스] 삼각 달팽이

by 언호 2022. 3. 16.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

2차원 배열에서 대각선으로 반을 채운다고 생각하였습니다.

그리하여 가장 왼쪽위의 좌표에서 시작하여 아래, 오른쪽, 왼쪽위 의 세가지 방향으로만 나아갔습니다.

2) 알고리즘

  • 구현

3) 풀이 코드

사용 언어 - Python

import sys
from collections import deque
sys.setrecursionlimit(10000)

dr = [1, 0, -1]     # 아래, 오른쪽, 왼쪽위
dc = [0, 1, -1]

def solution(n):
    answer = []                                                     # 정답 리스트
    pyramid = [[0] * n for _ in range(n)]                           # 2차원 배열
    direction = 0                                                   # 진행 방향, 초기 아래 방향
    
    def make_pyramid(y, x, direction, num):                         # 피라미드 생성
        if 0 <= y < n and 0 <= x < n and not pyramid[y][x]:         # 범위 안의 값이고, 숫자를 채우지 않았다면
            pyramid[y][x] = num                                     # 숫자 입력

            r = y + dr[direction]                                   # 다음 좌표
            c = x + dc[direction]

            if not (0 <= r < n and 0 <= c < n) or (pyramid[r][c]):  # 다음 좌표가 범위를 벗어나거나 숫자가 이미 있다면
                direction = (direction+1) % 3                       # 진행 방향을 변경
                r = y + dr[direction]                               # 새로운 다음 좌표
                c = x + dc[direction]

            make_pyramid(r, c, direction, num+1)                    # 재귀 탐색
    
    def make_answer():                                  # 정답 리스트 생성
        for i in range(n):                              # 2차원 배열 반복하며
            for j in range(n):          
                if pyramid[i][j]:                       # 숫자가 있는 경우에만, 리스트에 추가
                    answer.append(pyramid[i][j])
                else:                                   # 숫자가 없는 경우, 다음 행 탐색
                    break
    
    make_pyramid(0, 0, direction, 1)
    make_answer()
    
    return answer

📝 결과 및 학습한 내용

1) 어려웠던 내용

특별히 없습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

- https://programmers.co.kr/learn/courses/30/lessons/68645

 

코딩테스트 연습 - 삼각 달팽이

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[프로그래머스] 네트워크  (0) 2022.03.20
[백준] 11052 카드 구매하기  (0) 2022.03.19
[프로그래머스] 구명보트  (0) 2022.03.16
[프로그래머스] 캐시  (0) 2022.03.15
[프로그래머스] 양궁대회  (0) 2022.03.14

댓글