일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- SSAFY
- 리얼클래스
- KT
- python
- html
- 인앱결제
- 코딩테스트 연습
- 코딩테스트
- 우테코
- java 객체지향 프로그래밍
- IT 동향
- 네트워크 관리사 2급 실기
- 네트워크 관리사
- it 뉴스
- SSAFYcial
- 싸피
- 구글
- SSAFY 7기
- 백준
- 신문스크랩
- Java
- 네트워크 관리사 2급
- 백준위
- 프로그래머스
- 신문 스크랩
- it 이슈
- 카카오
- 코테
- IT 트렌드
- 싸피셜
Archives
- Today
- Total
개발자일걸요..?
삼각 달팽이 본문
728x90
반응형
링크 : https://programmers.co.kr/learn/courses/30/lessons/68645
코딩테스트 연습 - 삼각 달팽이
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]
programmers.co.kr
(프로그래머스 > 코딩테스트 연습 > 월간 코드 챌린지 시즌1 > 삼각달팽이(level2))
<문제>
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
- n은 1 이상 1,000 이하입니다.
<내가 작성한 코드>
from collections import deque
def solution(n):
answer = [0 for i in range(1, (n*(n+1))//2+1)]
num = deque([i for i in range(1, (n*(n+1))//2+1)])
turn = 0
turnPoint = 0
start = 0
k = 0
current = 0
while k<=n:
current = turnPoint + 4*turn
turnPoint = current
for i in range(2*turn+1, n-k+2*turn):
if num:
answer[current] = num.popleft()
current += i
else:
break
k+=1
for i in range(n-k+1):
if num:
answer[current] = num.popleft()
current += 1
else:
break
k+=1
current-=1
for i in range(n-k):
if num:
current+=(-n+i+turn)
answer[current] = num.popleft()
else:
break
k+=1
turn+=1
return answer
삼각형을 형태로 돌면서 숫자를 집어넣되, 마지막에 return할 배열에 들어갈 위치를 계산해서 집어넣음
<다른 사람의 코드를 참고하여 작성한 코드>
def solution(n):
answer =[[0]*i for i in range(1,n+1)]
num = 1
dx = [0,1,-1]; dy = [1,0,-1]
x,y = 0,0
i = 0
while num <= (n*(n+1))//2 :
answer[y][x] = num
nx = x+dx[i]; ny = y+dy[i]; num+=1
if 0<=ny<n and 0<=nx<=ny and answer[ny][nx]==0 :
x, y = nx, ny
else:
i = (i+1)%3
y+=dy[i]; x+=dx[i]
return sum(answer,[])
삼각형 모양을 만드는 배열칸을 만든 후, xy위치를 조정해가면서 숫자를 배열에 넣고, 마지막에 모든 요소를 합침.
반응형
Comments