programmers.co.kr/learn/courses/30/lessons/68645
ㅎ...ㅏ 규칙성이 이리도 쉬운걸 왜 코딩 챌린지 당시에는 안보였을까..
로직
n = 4 일 경우
[1]
[2, 9]
[3, 10, 8]
[4, 5, 6, 7]
위와 같이 나타낼 수 있다
여기서 나타나는 규칙성은
숫자를 순서대로 넣는다고 할 때,
- x 인덱스 값 증가(왼쪽 면 채우기)
- y 인덱스 값 증가(바닥 면 채우기)
- x, y 인덱스 값 감소(오른쪽 면 채우기)
가 한 사이클이다.
python에서는 case 문이 따로 존재하지 않아 채워야 하는 면이 바뀔 때마다 mode라는 변수에 1씩 더하고, % 3을 해주어 case 문과 비슷한 방식으로 동작하게끔 했다.
그리고
( 1, 2, 3, 4 )가 왼쪽 면
( 5, 6, 7 )가 바닥 면
( 8, 9 )가 오른쪽 면
( 10 ) 가 왼쪽 면
면이 달라질 때마다 채워야 하는 숫자의 길이가 1씩 감소한다는 규칙성도 찾을 수 있다.
코드
def solution(n):
answer = [[0] * i for i in range(1, n + 1)]
final = int((n + 1) / 2 * n)
mode, counter = 0, n
x, y = -1, 0
for num in range(1, final + 1):
if counter == 0:
n -= 1
counter = n
mode += 1
if mode % 3 == 0: # left side, x값 증가
x += 1
elif mode % 3 == 1: # bottom side, y값 증가
y += 1
else: # right side, x와 y값 감소
x -= 1
y -= 1
counter -= 1
answer[x][y] = num
final_answer = []
for sub_answer in answer:
final_answer.extend(sub_answer)
return final_answer
'코테 준비' 카테고리의 다른 글
[프로그래머스] 기능 개발 - Java (0) | 2020.10.13 |
---|---|
[프로그래머스] 완주하지 못한 선수 - Java (0) | 2020.10.13 |
[프로그래머스] 가장 긴 팰린드롬 (0) | 2020.09.29 |
[프로그래머스] N -Queen (0) | 2020.09.25 |
[프로그래머스] 카펫 (0) | 2020.09.20 |