데이터사이언스 기록기📚

[프로그래머스/Python] Level 2_삼각 달팽이(월간 코드 챌린지 시즌1) 본문

Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 2_삼각 달팽이(월간 코드 챌린지 시즌1)

syunze 2023. 10. 17. 13:28

📌문제 유형

월간 코드 챌린지 시즌1

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

- 반복 수 설정 : 3으로 나눠서 올림한 수가 반복 수

-  삼각 달팽이 구현

  • ① 왼쪽 대각선 아래로 내려가기 : [start ~ n-바퀴수] [바퀴수-1] (start는 반복 할 때마다 2씩 커짐)
  • ② 맨 아래 넣기 
  • ③ 오른쪽 대각선 위로 올라가기 
import math

def solution(n):
    answer = [[0 for _ in range(k)] for k in range(1,n+1)]
    
    # 반복 수 설정
    repeat = math.ceil(n/3)
    
    # 횟수만큼 반복
    cnt, num = 1, 1
    start = 0
    while cnt <= repeat:
        # 1. 왼쪽 대각선 아래로 내려가기
        for i in range(start, n - cnt + 1):
            if answer[i][cnt - 1] == 0:
                answer[i][cnt - 1] = num
                num += 1
            else:
                break
        # 2. 맨 아래 넣기
        for j in range(cnt, n - cnt + 1):
            if answer[n -cnt][j] == 0:
                answer[n -cnt][j] = num
                num += 1
            else:
                break
        # 3. 오른쪽 대각선 위로 올라가기
        for k in range(n - cnt -1, 0 ,-1):
            if answer[k][-cnt] == 0:
                answer[k][-cnt] = num
                num += 1
            else:
                break
        start += 2
        cnt += 1
    
    return sum(answer, [])

 

📌다른 사람의 문제풀이

def solution(n):
    dx=[0,1,-1];dy=[1,0,-1]
    b=[[0]*i for i in range(1,n+1)]
    x,y=0,0
    num=1
    d=0
    
    while num<=(n+1)*n//2:
        b[y][x]=num
        ny=y+dy[d]
        nx=x+dx[d]
        num+=1
        if 0<=ny<n and 0<=nx<=ny and b[ny][nx]==0:
        	y,x=ny,nx
        else:
        	d=(d+1)%3
           	y+=dy[d]
            	x+=dx[d]
    return sum(b,[])

 

📌리뷰

- 2차원 행렬 1차원으로 변환 : sum(answer,[]) 

728x90
Comments