728x90
300x250
https://programmers.co.kr/learn/courses/30/lessons/77485?language=java
행렬을 시계방향으로 회전하면서 가장 작은 값을 구하는 문제
import java.util.*;
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int seq =0;
int map[][] = new int[rows][columns];
int mapCopy[][] = new int[rows][columns];
//전체 배열 숫자 채우기
int n = 1;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
map[i][j]=n;
n++;
}
}
//반복문 돌며 직사각형 좌표 꺼내기
for (int i = 0; i < queries.length; i++) {
int sx = queries[i][0]-1;
int sy = queries[i][1]-1;
int ex = queries[i][2]-1;
int ey = queries[i][3]-1;
int min = map[sx][sy];
//왼->오
int next = map[sx][sy];
for (int j = sy+1; j <= ey ; j++) {
int tmp = map[sx][j];
min = Math.min(min, tmp);
map[sx][j] = next;
next = tmp;
}
//위->아래
for (int j = sx+1; j <=ex; j++) {
int tmp = map[j][ey];
min = Math.min(min, tmp);
map[j][ey] = next;
next = tmp;
}
//오->왼
for (int j = ey-1; j >= sy; j--) {
int tmp = map[ex][j];
min = Math.min(min, tmp);
map[ex][j] = next;
next = tmp;
}
//아래->위
for (int j = ex-1; j >= sx; j--) {
int tmp = map[j][sy];
min = Math.min(min, tmp);
map[j][sy]=next;
next=tmp;
}
answer[seq++]=min;
}
//회전하기
return answer;
}
}
728x90
'알고리즘 > 그 외' 카테고리의 다른 글
백준 1236번: 성 지키기 [배열][구현] -Java (0) | 2023.04.11 |
---|---|
[알고리즘] 시간복잡도 란? (0) | 2023.04.10 |
프로그래머스 - 키패드 누르기 [2020 카카오 인턴십] - Java (0) | 2021.08.12 |
백준 17143번: 낚시왕 [구현][시뮬레이션][Java] (0) | 2021.04.19 |
백준 13305번: 주유소 [그리디][greedy] - Java (0) | 2020.10.02 |