삼각 달팽이
골 때리는 문제였다..
처음에는 어떤 규칙을 찾아서 배열에 착착착 넣고 싶었는데
아무리 짱구를 굴려봐도 잘 안됐다.그래서 그냥 달팽이에 채울 숫자의 최대값을 구하고
n*n배열에 값을 채워넣는다.이 때, 아래와 같이 채워넣어야 하기 때문에 flag를 이용하여
수를 채우는 방향을 바꿔주는 조건을 설정하여![]()
각 조건에 맞으면 채워넣는 방향을 바꿔주면서 계속 진행한다.
뭐랄까 좀더 formal한 방법을 생각해내고 싶었지만 머리가 아파서 그만!
끝 !!
def solution(n): snail = [[0 for i in range(n)] for i in range(n)] # 삼각 달팽이에 채울 숫자의 최대값 maxNum = n * (n // 2 + 1) if not n & 1: maxNum -= (n // 2) top, bottom, left, right = 0, n - 1, 0, n - 1 flag = 0 row, col = -1, 0 for i in range(1, maxNum + 1): if flag == 0: row += 1 if row == bottom: flag = 1 top += 1 left += 1 elif flag == 1: col += 1 if col == right: flag = 2 bottom -= 1 right -= 1 elif flag == 2: row -= 1 col -= 1 if row == top or col == left: flag = 0 top += 1 right -= 1 snail[row][col] = i answer = [] for i in range(n): for j in range(n): if snail[i][j]: answer.append(snail[i][j]) return answer