[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[풀이]
회전 구현 시 처음 (r1, c1)값이 사라지지 않도록 temp에 저장해놓는다. 또한 값을 보전하기 위한 구현 순서(위, 왼쪽, 아래, 오른쪽 순서)와 이동 방향에 주의해야 한다.
[코드]
class Solution {
int[][] map;
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = {};
answer = new int[queries.length];
//회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return
map = new int[110][110];
int idx = 1;
map[0][0] = 0;
for(int i=1; i<=rows; i++){
for(int j=1; j<=columns; j++){
map[i][j] = idx++;
}
}
for(int i=0; i<queries.length; i++){
int num = turnRight(queries[i][0], queries[i][1], queries[i][2], queries[i][3]);
answer[i] = num;
}
return answer;
}
public int turnRight(int r1, int c1, int r2, int c2){
int temp = map[r1][c1];
int minNum = temp;
//위로 이동
for(int i=r1; i<r2; i++){
minNum = Math.min(minNum, map[i][c1]);
map[i][c1] = map[i+1][c1];
}
//왼쪽으로 이동
for(int i=c1; i<c2; i++){
minNum = Math.min(minNum, map[r2][i]);
map[r2][i] = map[r2][i+1];
}
//아래로 이동
for(int i=r2; i>r1; i--){
minNum = Math.min(minNum, map[i][c2]);
map[i][c2] = map[i-1][c2];
}
//오른쪽으로 이동
for(int i=c2; i>c1; i--){
minNum = Math.min(minNum, map[r1][i]);
map[r1][i] = map[r1][i-1];
}
map[r1][c1+1] = temp;
return minNum;
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[pro] 프로그래머스 level2 138476 귤 고르기 (Java) (0) | 2022.12.19 |
---|---|
[pro] 프로그래머스 level3 81303 표 편집 - 스택 (0) | 2022.12.17 |
[pro] 프로그래머스 level2 81302 거리두기 확인하기 (Java) - BFS (0) | 2022.12.16 |
[pro] 프로그래머스 level1 81301 숫자 문자열과 영단어 (Java) (0) | 2022.12.16 |
[pro] 프로그래머스 level3 118669 등산코스 정하기 (Java) - 다익스트라 (0) | 2022.12.16 |