반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ESG
- 학습 자동 중단
- 코틀린
- 보이스피싱
- nlp
- 밑바닥부터 시작하는 딥러닝
- MRC
- 선형회귀
- 로지스틱 회귀법
- k겹 교차검증
- 경제신문스크랩
- 뉴로 심볼릭
- 예측선
- 면접왕 이형
- 베스트 모델
- GPT-3
- 밑시딥
- ESG 채권
- 독서 #독서후기 #피로사회 #행동과잉 #긍정과잉
- 모두의 딥러닝
- 다중분류
- andoriod with kotlin
- 딥페이크
- 면접왕이형
- gradiant descent
- 안드로이드 구조
- 과적합
- 밑시딥2
- 경사하강법
- 안드로이드
Archives
- Today
- Total
Practice makes perfect!
[프로그래머스] 삼각달팽이 - python 본문
문제
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하
입출력 예
n | result |
4 | [1,2,9,3,10,8,4,5,6,7] |
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] |
def solution(n):
a = [[0]*i for i in range(1,n+1)] # 직각 삼각형을 표현할 리스트 생성
dx = [1,0,-1] # 아래, 오른쪽, 대각선
dy = [0,1,-1]
d = 0
cnt = 1 # 달팽이 수
x,y = 0,0 # 현재 위치
s = sum(i for i in range(1,n+1)) # 피라미드에 들어갈 최대 숫자
# 달팽이 수를 다 채울 때 까지
while(cnt <= s):
a[x][y] = cnt # 달팽이 채우기
cnt += 1 # 달팽이 수 증가
nx = x + dx[d] # 다음 움직일 위치
ny = y + dy[d]
# 직각삼각형을 벗어나지 않으며, 아직 방문하지 않은 경우
if 0<=nx<n and 0<=ny<n and a[nx][ny]==0:
# 위치 이동
x = nx
y = ny
else:
d = (d+1)%3 # 방향 회전 (0~2의 값만 반복되야하므로 %(모줄러)연산 사용)
x += dx[d]
y += dy[d]
return sum(a,[])
* 피라미드 모양을 왼쪽으로 다 밀어붙여서 직각 삼각형 형태로 만드는 것이 포인트
* 이동하는 방향(반시계)이 정해져 있으므로 dx, dy를 이용해 방향을 회전할 수 있도록 함.
반응형
'Coding test > 구현' 카테고리의 다른 글
[11654] 문자를 아스키 코드 값으로 바꾸기 (python) (0) | 2021.01.28 |
---|
Comments