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




제한 사항

입출력 예



풀이
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int[][] data = new int[rows][columns];
int count = 1;
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++) data[i][j] = count++;
for (int i = 0; i < queries.length; i++) {
int[] start = new int[] { queries[i][0] - 1, queries[i][1] - 1 };
int[] end = new int[] { queries[i][2] - 1, queries[i][3] - 1 };
int min = data[start[0]][start[1]];
for (int y = start[0]; y < end[0]; y++) {
min = Math.min(min, data[y + 1][start[1]]);
int temp = data[y][start[1]];
data[y][start[1]] = data[y + 1][start[1]];
data[y + 1][start[1]] = temp;
}
for (int x = start[1]; x < end[1]; x++) {
min = Math.min(min, data[end[0]][x + 1]);
int temp = data[end[0]][x];
data[end[0]][x] = data[end[0]][x + 1];
data[end[0]][x + 1] = temp;
}
for (int y = end[0]; y > start[0]; y--) {
min = Math.min(min, data[y - 1][end[1]]);
int temp = data[y][end[1]];
data[y][end[1]] = data[y - 1][end[1]];
data[y - 1][end[1]] = temp;
}
for (int x = end[1]; x > start[1] + 1; x--) {
min = Math.min(min, data[start[0]][x - 1]);
int temp = data[start[0]][x];
data[start[0]][x] = data[start[0]][x - 1];
data[start[0]][x - 1] = temp;
}
answer[i] = min;
}
return answer;
}
}
후기
이 문제도 꼬아서 내진 않았다. 주어진 대로 구현만 잘하면 되는데 관건은 좌표 처리를 하는데 헷갈릴 수도 있다는 것이다. 나는 시계 방향으로 돌리는게 어렵다고 판단해서 시계 반대 방향으로 자리를 바꾸는 식으로 풀었다. 단, 마지막 자리는 바꾸지 말아야 한다.
첫 번째 시도만에 통과하긴 했는데 머리가 안 돌아갈 때는 인덱스로 조절하는 문제가 헷갈려서 풀기 힘들다 ㅜ.ㅜ;;
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][Java][Lv. 0] 문자열 섞기 (0) | 2024.08.20 |
|---|---|
| [프로그래머스][Java][Lv. 2] 거리두기 확인하기 (0) | 2024.08.17 |
| [프로그래머스][Java][Lv. 2] 테이블 해시 함수 (0) | 2024.08.14 |
| [프로그래머스][Java][Lv. 2] 전력망을 둘로 나누기 (0) | 2024.08.13 |
| [프로그래머스][Java][Lv. 2] 혼자 놀기의 달인 (0) | 2024.08.11 |