본문 바로가기
알고리즘 문제/Programmerse

[Programmers] 행렬 테두리 회전하기

by 햄과함께 2021. 5. 31.
320x100

문제 : https://programmers.co.kr/learn/courses/30/lessons/77485


1부터 차례대로 세팅된 rows x columns 크기의 배열(let, array)을 먼저 만든다.

 

이제 행렬을 직접회전하면서 최소값을 저장한다.

x1 < x2, y1 < y2 이므로 배열크기를 벗어날 걱정없이 시작 이전 변수(let, before)은 array[x1+1][y1]으로 세팅한다.

회전은 위 순서대로 회전시킨다.

먼저 행을 x1으로 고정시킨 뒤 탐색하는 배열에 before값을 넣고 갱신되기 이전값으로 before 변수를 갱신한다.

다음은 열을 y2로 고정시킨 뒤 탐색하면서 배열값을 갱신시킨다. 이 때, 중복해서 값을 갱신시키면 안되므로 (x1, y2)는 갱신대상에서 제거시켜야 한다. 앞으로도 중복되는 값은 갱신시키지 않게 주의한다.

다음은 행을 x2로 고정시킨 뒤 탐색, 그 다음은 열을 y1으로 고정시킨 뒤 탐색한다.

 

N = rows, M = columns 라 하면

배열을 처음에 만드는데 드는 시간 O(NM). 질문에 답하는데 드는 시간 O(|queries| * (N+M))을 더한 값이 시간복잡도.


소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/programmers/Dev-matching/%ED%96%89%EB%A0%AC%20%ED%85%8C%EB%91%90%EB%A6%AC%20%ED%9A%8C%EC%A0%84%ED%95%98%EA%B8%B0.cpp

320x100

댓글