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 |
Tags
- 복사
- 오픽
- 오픽독학
- issubset
- 재귀
- 제곱근
- 딕셔너리
- %H
- 최대재귀높이
- 파일명 변경
- 이진탐색
- 백준
- 삼중for문 탈출
- heapq
- set
- Deque
- bfs
- 스택
- IH
- date_format
- dfs
- not null
- 슬라이싱
- 브루트포스
- 파이썬
- 구현
- 완전이진트리
- Inner Join
- 약수구하기
- 우선순위큐
Archives
- Today
- Total
나예
[프로그래머스] 삼각달팽이(파이썬, 구현) 본문
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
처음 문제를 보면서 빈 배열을 사이즈에 맞춰 만들어 둔 후, 특정 방향으로 이동해 배열에 숫자를 채우려고 했다. 이때 갈 수 있는 방향은 그림의 (1),(2),(3) 총 세가지
(1)로 갈때는 x값만 1 증가
(2)로 갈때는 y값만 1증가
(3) 방향으로 갈때는 x 는 1 감소, y는 1 감소
방향을 바꾸는 경우는 해당 방향으로 갔을때 더이상 배열이 존재하지 않거나 배열값이 채워져 있는 경우다
3. 코드
<변수 설명>
answer : 정답 배열
arr: 숫자 채워넣을 배열
fin_num : 넣을 숫자 중 제일 큰 숫자
nx, ny : 현재 위치 (now x, now y)
dx, dy 배열: 이동할 방향 배열
dir : 현재 이동할 방향
def solution(n):
answer = []
arr=[]
for i in range(1,n+1):
arr.append([0]*i)
fin_num = (n-1)*n//2 + n
nx=0
ny=0
dx=[1,0,-1]
dy=[0,1,-1]
dir = 0
for i in range(1,fin_num+1):
arr[nx][ny] = i
if 0<= nx + dx[dir] <n and 0<= ny +dy[dir] < n and arr[nx+dx[dir]][ny+dy[dir]] ==0:
nx += dx[dir]
ny += dy[dir]
else:
dir +=1
if dir >=3:
dir=0
nx += dx[dir]
ny += dy[dir]
for a in arr:
answer += a
return answer
728x90