문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
없음
풀이
테두리를 꼭짓점에 맞춰 네 부분으로 나눠 이동시킨다.
1. (y1, x1 + 1) ~ (y1, x2)
2. (y1 + 1, x2) ~ (y2, x2)
3. (y2, x2) ~ (y2, x1 + 1)
4. (y2, x1) ~ (y1 + 1, x1)
이때 첫 꼭짓점을 제외한 각 꼭짓점 다음 3 칸은 덮어씌워지기 때문에 탐색 전에 미리 임시 변수에 값을 저장시켜놓고 탐색이 끝난 후 알맞은 좌표에 대입한다.
탐색하면서 찾은 최솟값을 리스트에 넣고 반환한다.
코드
import java.util.*;
class Solution {
public ArrayList<Integer> solution(int rows, int columns, int[][] queries) {
int[][] board = new int[rows+1][columns+1];
for(int i=1; i<=rows; i++)
for(int j=1; j<=columns; j++)
board[i][j] = (i-1)*columns + j;
ArrayList<Integer> list = new ArrayList<>();
for(int[] query: queries) {
int y1 = query[0];
int x1 = query[1];
int y2 = query[2];
int x2 = query[3];
int[] tmp = {board[y1][x2], board[y2][x2], board[y2][x1]};
int min = Math.min(board[y1][x2], board[y2][x1]);
min = Math.min(min, board[y2][x2]);
for(int i = x2; i > x1; i--) {
board[y1][i] = board[y1][i - 1];
min = Math.min(min, board[y1][i - 1]);
}
for(int i = y2; i > y1; i--) {
board[i][x2] = board[i - 1][x2];
min = Math.min(min, board[i - 1][x2]);
}
for(int i = x1; i < x2; i++) {
board[y2][i] = board[y2][i + 1];
min = Math.min(min, board[y2][i + 1]);
}
for(int i = y1; i < y2; i++) {
board[i][x1] = board[i + 1][x1];
min = Math.min(min, board[i + 1][x1]);
}
board[y1 + 1][x2] = tmp[0];
board[y2][x2 - 1] = tmp[1];
board[y2 - 1][x1] = tmp[2];
list.add(min);
}
return list;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 정사각형 찾기 (Java) (0) | 2022.11.04 |
---|---|
[프로그래머스] 올바른 괄호 (Java) (0) | 2022.11.04 |
[프로그래머스] 3 x n 타일링 (Java) (0) | 2022.11.04 |
[프로그래머스] 2 x n 타일링 (Java) (0) | 2022.11.04 |
[프로그래머스] 푸드 파이트 대회 (Java) (0) | 2022.11.04 |