728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/77485
풀이 코드 - 구현
풀이 과정
- 좌측 상단 테두리 (x1, y1) 위치의 값을 저장해 놓는다.
- 행렬의 좌측 테두리 -> 하단 테두리 -> 우측 테두리 -> 상단 테두리 순으로 시계 방향으로 행렬의 값을 한칸씩 이동시킨다.
- 저장해 두었던 좌측 상단 테두리 값을 (x1, y1+1) 위치에 저장한다.
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int[][] board = new int[rows+1][columns+1];
int num = 1;
for(int i = 1 ; i <= rows; i++) {
for(int j = 1; j <= columns; j++) {
board[i][j] = num++;
}
}
for(int i = 0 ; i < queries.length; i++) {
int x1 = queries[i][0];
int y1 = queries[i][1];
int x2 = queries[i][2];
int y2 = queries[i][3];
int temp = board[x1][y1];
int min = temp;
//좌측 테두리 이동
for(int j = x1; j < x2; j++) {
board[j][y1] = board[j+1][y1];
min = Math.min(min, board[j][y1]);
}
//하단 테두리 이동
for(int j = y1; j < y2; j++) {
board[x2][j] = board[x2][j+1];
min = Math.min(min, board[x2][j]);
}
//우측 테두리 이동
for(int j = x2; j > x1; j--) {
board[j][y2] = board[j-1][y2];
min = Math.min(min, board[j][y2]);
}
//상단 테두리 이동
for(int j = y2; j > y1; j--) {
board[x1][j] = board[x1][j-1];
min = Math.min(min, board[x1][j]);
}
board[x1][y1+1] = temp;
answer[i] = min;
}
return answer;
}
}
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 카펫 - 자바(Java) (0) | 2022.01.03 |
---|---|
[프로그래머스] 튜플 - 자바(Java), 2019 카카오 개발자 겨울 인턴십 (0) | 2021.10.22 |
[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 - 자바(Java) (0) | 2021.10.15 |
[2020 KAKAO BLIND RECRUITMENT] 문자열 압축 - 자바(Java) (0) | 2021.10.15 |
[프로그래머스] 단체사진 찍기(2017 카카오 코드 본선) - 자바, DFS(깊이 우선 탐색) (0) | 2021.07.22 |
댓글