[COS PRO 1급] 1차 문제5) 소용돌이 수

아현·2023년 7월 20일
0

Algorithm

목록 보기
370/400

연습문제

소용돌이 수

다음과 같이 n x n 크기의 격자에 1부터 n x n까지의 수가 하나씩 있습니다.

이때 수가 다음과 같은 순서로 배치되어있다면 이것을 n-소용돌이 수라고 부릅니다.

소용돌이 수에서 1행 1열부터 n 행 n 열까지 대각선상에 존재하는 수들의 합을 구해야 합니다.

위의 예에서 대각선상에 존재하는 수의 합은 15입니다.
격자의 크기 n이 주어질 때 n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 하도록 solution 함수를 완성해주세요.

□ 매개변수 설명

격자의 크기 n이 solution 함수의 매개변수로 주어집니다.
n은 1 이상 100 이하의 자연수입니다.

□ return 값 설명

n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 해주세요.



참고,
참고


def solution(n):
	answer = 0
	if n == 1:
		return 1
	if n == 2:
		return 4
	else:
		answer = n * 2 + (n - 1) * 4 * (n - 2) + solution(n - 2)
	
	return answer


def solution(n):
	total = 1 * n
	
	for i in range(n, 1, -2):
		total += (i - 1) * 2 * ((i - 1) * 2 - 1)
		
	return total


참고


def in_range(i, j, n):
	return 0 <= i and i < n and 0 <= j and j < n

def solution(n):
	panel = [[0 for j in range(n)] for i in range(n)]
	dx = [1, 0, -1, 0]
	dy = [0, 1, 0. -1]
	x, y = 0, 0
	num = 1
	
	while in_range(x, y, n) and panel[x][y] == 0:
		for k in range(4):
			if not in_range(x, y, n) or panel[x][y] != 0:
				break
				
			while True:
				panel[x][y] = num
				num += 1
				nx = x + dx[k]
				ny = y + dy[k]
				
				if not in_range(nx, ny, n) or panel[nx][ny] != 0:
					x += dx[(k + 1) % 4]
					y += dy[(k + 1) % 4]
					break
				
				x = nx
				y = ny
				
	answer = 0
	for i in range(n):
		answer += panel[i][i]
		
	return answer
    
profile
For the sake of someone who studies computer science

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

가치 있는 정보 공유해주셔서 감사합니다.

답글 달기