올해 여름쯤? 했던 데브 매칭에 나왔던 문제랍니다.
작년 여름에 생애 첫 코테 합격 메일로 데브매칭 코테 합격 메일 받은게 엊그제 같은데 시간 참 빠릅니다.
개인적으로는 이런 행렬갖고 노는 문제 진짜 싫어 합니다.
왜냐하면 진짜 싫기 때문입니다.
다행히 얘는 그런 류 중에서 제일 쉬운 축에 속하지 않나 싶습니다.
겉 테두리만 슥슥 돌려주면 됩니다.
class Solution {
int[][] matrix;
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
matrix = new int[rows][columns];
int num = 1;
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++) {
matrix[i][j] = num++;
}
}
// printMatrix(rows, columns);
int idx = 0;
for(int[] query : queries) {
int fromY = query[0] - 1;
int fromX = query[1] - 1;
int toY = query[2] - 1;
int toX = query[3] - 1;
answer[idx++] = rotate(fromY, fromX, toY, toX);
// printMatrix(rows, columns);
}
return answer;
}
int rotate(int fromY, int fromX, int toY, int toX) {
// 시작점 숫자
int start = matrix[fromY][fromX];
int min = matrix[fromY][fromX];
// 왼쪽 아래->위
for(int y = fromY; y < toY; y++) {
matrix[y][fromX] = matrix[y + 1][fromX];
min = Math.min(min, matrix[y][fromX]);
}
// 아래 왼->오른
for(int x = fromX; x < toX; x++) {
matrix[toY][x] = matrix[toY][x + 1];
min = Math.min(min, matrix[toY][x]);
}
// 오른 위->아래
for(int y = toY; y > fromY; y--) {
matrix[y][toX] = matrix[y - 1][toX];
min = Math.min(min, matrix[y][toX]);
}
// 위 오른->왼
for(int x = toX; x > fromX; x--) {
matrix[fromY][x] = matrix[fromY][x - 1];
min = Math.min(min, matrix[fromY][x]);
}
matrix[fromY][fromX + 1] = start;
return min;
}
void printMatrix(int rows, int columns) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
한 번 IDE 를 쓰지 않고 풀어보았습니다. 쉽지 않네요
그냥 하라는 대로 삭삭 돌려주면 됩니다.
로직 상으로는 밀어준다가 좀 더 맞는 표현같네요.
1~2년 동안 행렬 돌리는건 이렇게 밖에 못짜는데, 다른 좋은 방법 있음 댓글 날려 주세요.
삼성 준비할 땐가.. 별 희한하게 행렬을 돌리란 문제도 몇번 봤었는데.. 죽는 줄 알았습니다
암튼 행렬이랑 사이가 별로 안좋습니다 전.
감 좀 잡고 어려운 문제 도전하기!!!! 화이팅!!!!!!!
'Algorithm > Programmers' 카테고리의 다른 글
[BFS] 네트워크 - Java (0) | 2021.11.09 |
---|---|
[2021 Dev-Matching: 웹 백엔드 개발자(상반기)][구현/Map 활용] 다단계 칫솔 판매 - Java (0) | 2021.10.04 |
[2021 카카오 채용연계형 인턴십][구현] 표 편집 - Java (2) | 2021.09.03 |
[2021 카카오 채용연계형 인턴십][BFS] 거리두기 확인하기 - Java (0) | 2021.08.24 |
[2021 카카오 채용연계형 인턴십][문자열 처리] 숫자 문자열과 영단어 - Java (0) | 2021.07.13 |