728x90
https://programmers.co.kr/learn/courses/30/lessons/77485
코딩테스트 연습 - 행렬 테두리 회전하기
6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]
programmers.co.kr
주의!!
실제 행렬과 리스트의 원소 접근법 바뀜 주의
접근법
0. matrix 행렬 초기화
1. 변환 해야하는 테두리 정보의 좌표값을 moves 리스트에 저장한다.
-> 시계 방향으로 회전하므로, 시계 방향 순서대로 저장한다. (난 이 부분이 조금 어려웠다)
2. moves 순서대로 다음 값과 회전한다.
-> tmp 변수와 now (현재 위치의) 변수 값을 따로 저장한 후 사용
3.변환 된 matrix에서 최솟값 찾기
def solution(rows, cols, queries):
answer = []
matrix = [[0 for i in range(cols)] for j in range(rows)]
num = 1
#matrix 배열 초기화
for i in range(rows):
for j in range(cols):
matrix[i][j] = num
num+=1
#시계 방향
dx = [1,0,-1,0]
dy = [0,1,0,-1]
for query in queries:
y,x,yy,xx = query #x와 y의 값 바뀜 주의
moves = []
nx, ny = x-2, y-1
#모든 시계방향에 대해서
for i in range(4):
while True:
nx = nx + dx[i]
ny = ny + dy[i]
#테두리 조건
if nx < x-1 or nx >= xx or ny < y-1 or ny >= yy :
nx -= dx[i]
ny -= dy[i]
break
moves.append((nx,ny)) #테두리에 해당하는 좌표값 시계방향 순서대로 저장
moves=moves[:-1]
tmp = matrix[moves[-1][1]][moves[-1][0]]
#테두리 변환
for i in range(len(moves)):
now = matrix[moves[i][1]][moves[i][0]]
matrix[moves[i][1]][moves[i][0]] = tmp
tmp = now
min_ = 10000
#변환 된 테두리에서 최솟값 찾기
for i in range(len(moves)):
min_ = min(min_,matrix[moves[i][1]][moves[i][0]])
answer.append(min_)
return answer
'Python > CoTe' 카테고리의 다른 글
[programmers] 1차 캐시 (0) | 2022.03.27 |
---|---|
[programmers] 전력망 둘로 나누기 (0) | 2022.03.26 |
[programmers] 멀쩡한 사각형 , 시간 초과 이유+예외처리 (0) | 2022.03.25 |
[programmers] 주차 요금 계산 (0) | 2022.03.25 |
[programmers] 점프와 순간이동 (0) | 2022.03.21 |