문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
뭔가 특별한 알고리즘이 필요하진 않고 그냥 행렬을 만들고 행렬 내에 요소들을 다루는 문제인 것 같다.
작성한 코드 (성공)
import java.util.*;
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[][] matrix = new int[rows+1][columns+1];
int count = 1;
for (int i = 1; i < rows+1; i++) {
for (int j = 1; j < columns+1; j++) {
matrix[i][j] = count++;
}
}
int[] answer = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int y1 = queries[i][0];
int x1 = queries[i][1];
int y2 = queries[i][2];
int x2 = queries[i][3];
int prevNum = matrix[y1+1][x1];
int min = 10001;
// 오른쪽으로 가
for (int x = x1; x <= x2; x++) {
int now = matrix[y1][x];
int temp = prevNum;
prevNum = now;
matrix[y1][x] = temp;
min = Math.min(now,min);
}
// 아래로 가
for (int y = y1+1; y <= y2; y++) {
int now = matrix[y][x2];
int temp = prevNum;
prevNum = now;
matrix[y][x2] = temp;
min = Math.min(now,min);
}
// 왼쪽으로 가
for (int x = x2-1; x >= x1; x--) {
int now = matrix[y2][x];
int temp = prevNum;
prevNum = now;
matrix[y2][x] = temp;
min = Math.min(now,min);
}
// 위로 가
for (int y = y2-1; y >= y1+1; y--) {
int now = matrix[y][x1];
int temp = prevNum;
prevNum = now;
matrix[y][x1] = temp;
min = Math.min(now,min);
}
answer[i] = min;
}
return answer;
}
}
더 좋은 코드를 만들기 위한 생각들
- 델타 행렬로 풀까 하다가 오히려 가독성이 떨어지는 느낌이라서 그냥 풀었음
- swap 함수를 구현해서 썼으면 중복코드를 많이 줄였을 것
'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글
| 배달 (그래프, DFS) (0) | 2026.07.08 |
|---|---|
| 전력망을 둘로 나누기 (BFS) (0) | 2026.07.07 |
| 무인도 여행 (DFS) (0) | 2026.07.03 |
| 두 큐 합 같게 만들기 (투 포인터) (0) | 2026.07.02 |
| 연속된 부분 수열의 합 (투 포인터) (0) | 2026.07.01 |




