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
- bfs
- 완전이진트리
- set
- not null
- Inner Join
- %H
- 스택
- 약수구하기
- 파일명 변경
- 최대재귀높이
- 이진탐색
- 오픽
- heapq
- 삼중for문 탈출
- IH
- 백준
- 슬라이싱
- 구현
- dfs
- 딕셔너리
- 브루트포스
- 제곱근
- date_format
- Deque
- 복사
- 오픽독학
- 우선순위큐
- 재귀
Archives
- Today
- Total
나예
[프로그래머스] 삼각달팽이(파이썬, 구현) 본문
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/68645
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