1 ] 문제
다음과 같이 n x n 크기의 격자에 1부터 n x n까지의 수가 하나씩 있습니다.
이때 수가 다음과 같은 순서로 배치되어있다면 이것을 n-소용돌이 수라고 부릅니다.
소용돌이 수에서 1행 1열부터 n 행 n 열까지 대각선상에 존재하는 수들의 합을 구해야 합니다.
위의 예에서 대각선상에 존재하는 수의 합은 15입니다.
격자의 크기 n이 주어질 때 n-소용돌이 수의 대각선상에 존재하는 수들의 합을 return 하도록 solution 함수를 완성해주세요.
2 ] 해답
# nXn크기의 격자모양에서 벗어나는 숫자가 없게 정의
def in_range(i, j, n):
return 0 <= i and i < n and 0 <= j and j < n
def solution(n):
pane = [[0 for j in range(n)] for i in range(n)]
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
ci, cj = 0, 0
num = 1
while in_range(ci, cj, n) and pane[ci][cj] == 0:
for k in range(4):
if not in_range(ci, cj, n) or pane[ci][cj] != 0:
break
while True:
pane[ci][cj] = num
num += 1
ni = ci + dy[k]
nj = cj + dx[k]
if not in_range(ni, nj, n) or pane[ni][nj] != 0:
#ci,cj 값 3x3격자이내의 인텍스값 정의 dy,dx
ci += dy[(k + 1) % 4]
cj += dx[(k + 1) % 4]
break
ci = ni
cj = nj
ans = 0
for i in range(n):
ans += pane[i][i]
return ans
def in_range(i, j, n):
return 0 <= i and i < n and 0 <= j and j < n
def solution(n):
pane = [[0 for j in range(n)] for i in range(n)]
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
ci, cj = 0, 0
num = 1
while in_range(ci, cj, n) and pane[ci][cj] == 0:
for k in range(4):
if not in_range(ci, cj, n) or pane[ci][cj] != 0:
break
while True:
pane[ci][cj] = num
num += 1
ni = ci + dy[k]
nj = cj + dx[k]
if not in_range(ni, nj, n) or pane[ni][nj] != 0:
#ci,cj 값 3x3격자이내의 인텍스값 정의 dy,dx
ci += dy[(k + 1) % 4]
cj += dx[(k + 1) % 4]
break
ci = ni
cj = nj
ans = 0
for i in range(n):
ans += pane[i][i]
return ans
ci, cj 값 / 격자모양 이내
'파이썬 Phyton' 카테고리의 다른 글
[파이썬 코딩] Cos Pro 1급 4차 문제1 - 사전에서 단어찾기 (0) | 2023.07.17 |
---|---|
[파이썬 코딩] Cos Pro 1급 3차 문제1 - 배열을 회전시켜보세요 (0) | 2023.07.17 |
[파이썬 코딩] 메서드 , def 키워드 란? (1) | 2023.07.16 |
[파이썬 코딩] Cos Pro 1급 1차 문제4 - 타임머신 (0) | 2023.07.16 |
[파이썬 코딩] Cos Pro 1급 1차 문제3 - 계산기 by 문자열 (0) | 2023.07.16 |