[프로그래머스/python] 삼각달팽이
2022. 8. 23. 16:34ㆍ알고리즘/프로그래머스
반응형
삼각 달팽이
월간 코드 챌린지 시즌1
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
2차원 배열에서 1부터 삼각형의 방향따라 증가시켜가며 배열을 채워갔습니다.
그리고 크기는 방향을 전환할수록 1씩 줄어듭니다.
값을 1부터 시작하며 아래로 내려가는 변부터 시작합니다.
- (x,y) 로 설정되었다면 (x-1, y) 을 삼각형의 크기(N)만큼 진행합니다.
- 이후 아랫변을 진행하게 되는데 (x, y+1) 을 진행합니다.
- 이후 남은 변을 채울 시 대각선으로 역으로 올라가기 때문에 (x-1, y-1) 을 진행합니다.
매번 방향을 전환할 때 마다 N-1을 진행하여 변의 길이 조절을 합니다.
또한 이전에 진행한 x, y에 대해서 값을 조정 해주는 과정이 필요합니다.
풀이코드
def solution(n):
answer = []
li = [[0]*n for i in range(n) ]
num_count = 1
x=0
y=0
while(n>0):
for i in range(n):
li[x][y] = num_count
x+=1
num_count+=1
n-=1
if n<=0:
break
x-=1
y+=1
for i in range(n):
li[x][y] = num_count
y+=1
num_count+=1
n-=1
if n<=0:
break
y-=2
x-=1
for i in range(n):
li[x][y] = num_count
x-=1
y-=1
num_count+=1
n-=1
if n<=0:
break
x+=2
y+=1
for l in li:
for i in l:
if i==0:
continue
else:
answer.append(i)
return 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,[])
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/python] 영어 끝말잇기 (0) | 2022.08.23 |
---|---|
[프로그래머스/python] 배달 (0) | 2022.08.23 |
[프로그래머스/python] 두 큐 합 같게만들기 (0) | 2022.08.23 |
[프로그래머스/python] 추석트래픽 (0) | 2022.08.23 |
[프로그래머스/javascript] 3진법 뒤집기 (0) | 2022.08.15 |