728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu
import sys
sys.stdin = open("swea_2105.txt", "r")
T = int(input())
for tc in range(1, 1 + T):
N = int(input())
matrix = [list(map(int,input().split())) for _ in range(N)]
answer = -1
# [1,1], [1,2],[2,1], ~, [1,19], ~ ,[19,1] 2~ 20
boundery = []
for k in range(2, 21):
for i in range(k):
if i and k - i:
boundery.append((i,k-i))
for l, r in boundery:
for i in range(N):
for j in range(N):
def check(i, j, l, r):
pos_r, pos_c_l, pos_c_r = i, j, j
l_dir, r_dir = -1, 1
loop_set = set()
loop_set.add(matrix[i][j])
while True:
pos_r += 1
pos_c_l += l_dir
pos_c_r += r_dir
if not (0 <= pos_c_l< N and 0 <= pos_c_r < N and 0<=pos_r<N):
return -1
l -= 1
r -= 1
if not l:
l_dir = -l_dir
if not r:
r_dir = -r_dir
if pos_c_l == pos_c_r:
if matrix[pos_r][pos_c_l] not in loop_set:
loop_set.add(matrix[pos_r][pos_c_l])
break
if matrix[pos_r][pos_c_l] in loop_set:
return -1
loop_set.add(matrix[pos_r][pos_c_l])
if matrix[pos_r][pos_c_r] in loop_set:
return -1
loop_set.add(matrix[pos_r][pos_c_r])
return len(loop_set)
tmp = check(i, j, l, r)
if answer < tmp:
answer = tmp
print("#{} {}".format(tc, answer))
N = 20이고 python이 15초 이므로 반복문을 중첩해서 사용해도 될것같았고, 디저트 카페 투어하는 것을 구현하기 위해 boundery라는 배열을 만들어서 모든 바운더리를 순회하는 방식으로 만들었다.
투어는 중첩 반복문을 사용하여 크기별로 진행했고, 시계방향, 반시계방향이 아니라 각각 왼쪽 오른쪽을 확인하면서 내려갔고 범위를 벗어나거나 중복값이 있는 경우 -1을 반환하는 식으로 만들었다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 3055 탈출 python (0) | 2021.08.10 |
---|---|
[백준] 2573 빙산, python (0) | 2021.08.03 |
[백준] 1912 연속합, python, C (0) | 2021.07.27 |
[백준] 18352 특정 거리의 도시 찾기 python (0) | 2021.07.27 |
[백준] 16236 아기 상어, python (0) | 2021.07.22 |