문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
처음에는 행렬이 1부터 순서대로 시작하니까 굳이 행렬을 계속 갱신하지 않고 풀이할 수 있지 않을까 생각했는데 그냥 직접 행렬을 rotation해주는게 답인 것 같아서 로테이션 함수를 따로 만들어주었다.
✔️ rotation함수
1. 행렬의 각 꼭짓점 부분을 t1, t2, t3, t4 변수를 이용하여 처음에 보관
2. temp변수를 이용하여 기존의 행렬값 보관
3. before변수를 이용해 temp값을 한 번 더 보관하여 다음 수를 갱신할 수 있도록 함
4. 이 때 flag변수로 반복문의 첫번째 시작을 구분하여 before값을 꼭짓점으로 넣을지, temp로 넣을지 구분
5. 각 반복문마다 min값 갱신
아래 코드에서 사용한 4개의 for문은 사진과 같은 형태로 갱신시켜준 것이다.
소스 코드
class Solution {
static int[][] grid;
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int idx = 1;
grid = new int[rows][columns];
for(int r = 0; r < rows; r++)
for(int c = 0; c < columns; c++)
grid[r][c] = idx++;
idx = 0;
for(int i = 0; i < queries.length; i++){
answer[idx++] = rotation(queries[i][0]-1,
queries[i][1]-1,
queries[i][2]-1,
queries[i][3]-1);
}
return answer;
}
public static int rotation(int r1, int c1, int r2, int c2) {
int min = Integer.MAX_VALUE;
int t1 = grid[r1][c1], t2 = grid[r1][c2];
int t3 = grid[r2][c1], t4 = grid[r2][c2];
boolean flag = false;
int temp, before;
//r1행 이동
before = t1;
for(int i = c1 + 1; i <= c2; i++) {
min = Math.min(min, before);
if(flag) {
temp = grid[r1][i];
grid[r1][i] = before;
before = temp;
}
else {
temp = grid[r1][i];
grid[r1][i] = before;
before = temp;
flag = true;
}
}
//c2열 이동
flag = false;
before = t2;
for(int i = r1 + 1; i <= r2; i++) {
min = Math.min(min, before);
if(flag) {
temp = grid[i][c2];
grid[i][c2] = before;
before = temp;
}else {
temp = grid[i][c2];
grid[i][c2] = before;
before = temp;
flag = true;
}
}
//r2행 이동
flag = false;
before = t4;
for(int i = c2 - 1; i >= c1; i--) {
min = Math.min(min, before);
temp = grid[r2][i];
if(flag) {
grid[r2][i] = before;
before = temp;
}else {
grid[r2][i] = before;
before = temp;
flag = true;
}
}
//c1행 이동
flag = false;
before = t3;
for(int i = r2 - 1; i >= r1; i--) {
min = Math.min(min, before);
temp = grid[i][c1];
if(flag) {
grid[i][c1] = before;
before = temp;
}else {
grid[i][c1] = before;
before = temp;
flag = true;
}
}
return min;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[PCCP모의고사2] 2번 신입사원 교육 JAVA (0) | 2024.02.19 |
---|---|
[PCCP모의고사2] 1번 실습용 로봇 JAVA (1) | 2024.02.17 |
[프로그래머스] 보석 쇼핑 자바 (0) | 2022.04.25 |
[프로그래머스] 자물쇠와 열쇠 자바 (0) | 2022.03.08 |
[프로그래머스] 단체사진 찍기 자바 (0) | 2022.01.21 |