728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77485#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
728x90
👩💻 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
vector<vector<int>> matrix(rows, vector<int>(columns, 0));
for(int r=0; r<rows; r++){
for(int c=0; c<columns; c++){
matrix[r][c] = r * columns + c + 1;
}
}
for(int q=0; q<queries.size(); q++){
int x1 = queries[q][0]-1;
int y1 = queries[q][1]-1;
int x2 = queries[q][2]-1;
int y2 = queries[q][3]-1;
int number = matrix[x1][y1];
int minNumber = number;
for (int y = y1+1; y <= y2; y++) {
int temp = matrix[x1][y];
matrix[x1][y] = number;
minNumber = min(minNumber, matrix[x1][y]);
number = temp;
}
for (int x = x1+1; x <= x2; x++){
int temp = matrix[x][y2];
matrix[x][y2] = number;
minNumber = min(minNumber, matrix[x][y2]);
number = temp;
}
for (int y = y2-1; y >= y1; y--) {
int temp = matrix[x2][y];
matrix[x2][y] = number;
minNumber = min(minNumber, matrix[x2][y]);
number = temp;
}
for (int x = x2-1; x >= x1; x--){
int temp = matrix[x][y1];
matrix[x][y1] = number;
minNumber = min(minNumber, matrix[x][y1]);
number = temp;
}
answer.push_back(minNumber);
}
return answer;
}
📝 풀이
rows x columns 크기의 행렬을 가로 방향으로 1씩 증가하는 값을 갖도록 초기화해줍니다.
행렬의 회전을 상단 가로, 우측 세로, 하단 가로, 좌측 세로 4구간으로 나누어 진행합니다.
상단 가로의 경우 오른쪽으로 한 칸씩 움직이고, 우측 세로의 경우 아래로 한 칸씩 움직입니다.
반대로 하단 가로의 경우 왼쪽으로 한 칸씩 움직이고, 좌측 세로의 경우 위로 한 칸씩 움직입니다.
움직일 때마다의 수를 최솟값인지 비교하여 회전이 끝난 후 answer에 최솟값을 push 합니다.
모든 쿼리에 들어있는 회전을 마치면 최종적으로 answer을 return 합니다.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 괄호 변환 (0) | 2024.10.04 |
---|---|
[프로그래머스] 무인도 여행 (3) | 2024.10.03 |
[프로그래머스] [3차] 방금그곡 (0) | 2024.10.01 |
[프로그래머스] 미로 탈출 (0) | 2024.09.30 |
[프로그래머스] 배달 (1) | 2024.09.07 |