https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근 방법
- rows, columns가 100이하이다. O(n^2)도 무리 없이 돌아가므로 구현으로 풀었다
- 먼저 조건에 맞는 map을 만든다
- 각 쿼리에 맞는 회전을 수행하며 가장작은 숫자를 받아와 ansList에 담는다
- 회전을 구현한다
- 회전은 swap할때 처럼 tmp에 최초 원소를 담고 주어진 방향 순서대로 돌며 값을 덮어썼다.
- 마지막에 최초원소가 가야할 자리에 tmp를 덮어썼다.
코드
class Solution {
int n,m;
int[][] map;
public int[] solution(int rows, int columns, int[][] queries) {
int[] ans = new int[queries.length];
n = rows;
m = columns;
int num = 1;
map = new int[n][m];
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
map[i][j] = num++;
}
}
int idx = 0;
for(int[] q : queries){
int sr = q[0]-1;int sc = q[1]-1;
int er = q[2]-1;int ec = q[3]-1;
int minValue = rotate(sr,sc,er,ec);
ans[idx++] = minValue;
}
return ans;
}
int rotate(int sr,int sc,int er,int ec){
int tmp = map[sr][sc];
int min = map[sr][sc];
int vl = er-sr; int hl = ec-sc;
for(int i = 0 ; i < vl ; i++){ //좌
min = Math.min(min, map[sr+1+i][sc]);
map[sr+i][sc] = map[sr+1+i][sc];
}
for(int i = 0 ; i < hl ; i++){ //하
min = Math.min(min, map[er][sc+1+i]);
map[er][sc+i] = map[er][sc+1+i];
}
for(int i = 0 ; i < vl ; i++){ //우
min = Math.min(min, map[er-1-i][ec]);
map[er-i][ec] = map[er-1-i][ec];
}
for(int i = 0 ; i < hl ; i++){ //상
min = Math.min(min, map[sr][ec-1-i]);
map[sr][ec-i] = map[sr][ec-1-i];
}
map[sr][sc+1] = tmp;
return min;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV 2 괄호변환 (0) | 2024.11.01 |
---|---|
[프로그래머스] LV 3 보석 쇼핑 (3) | 2024.10.31 |
[프로그래머스] LV 2 줄 서는 방법 (0) | 2024.10.31 |
[프로그래머스] LV 2 무인도 여행 (2) | 2024.10.30 |
[프로그래머스] LV 2 방금그곡 (2) | 2024.10.30 |