코테 준비용 공부 - 행렬 테두리 회전하기

jihunnit·2022년 9월 2일
0

코테

목록 보기
4/20

행렬 테두리 회전하기

LV2 문제이지만 딱히 할 말 없다.
처음엔 문제를 보고 뜨악했지만(쿼리인가? 맙소사 구간에서 최대 최소? 뭐지? 뭐지?)
자세히 보니 요구조건에 시간이나 효율성 등 언급이 없다.

그냥 구현 문제라는 뜻이다.

그냥 배열을 돌리면 된다.
사실 이렇게 배열을 돌려도 각 행 또는 열의 크기의 for문을
딱 4번 돌리기 때문에
그다지 비효율적인 알고리즘도 아니라는 생각이 든다.
딱히 아이디어도 없는 문제기에 스포랄것도 없다.

#include <string>
#include <vector>

using namespace std;
int arr[101][101]={0};
int cw(int ,int,int,int);
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    for(int i=1;i<=rows;i++){
        for(int j=1;j<=columns;j++){
            arr[i][j]=(i-1)*columns+j;
        }
    }
    vector<int> answer;
    for(int i=0;i<queries.size();i++){
        answer.push_back(cw(queries[i][0],queries[i][1],queries[i][2],queries[i][3]));
    }
    return answer; 
}
int cw(int x1,int y1,int x2,int y2){
	
	int tmp = arr[x1][y1];
	int tmp2 = tmp;
	int m=987654321;
	
	for(int i=y1;i<y2;i++){
		tmp2=arr[x1][i+1];
		m=min(m,tmp2);
		arr[x1][i+1]=tmp;
		tmp=tmp2;
	}		
	for(int i=x1;i<x2;i++){
		tmp2 = arr[i+1][y2];
		m=min(m,tmp2);
		arr[i+1][y2]=tmp;
		tmp=tmp2;
	}
	for(int i=y2;i>y1;i--){
		tmp2=arr[x2][i-1];
		m=min(m,tmp2);
		arr[x2][i-1]=tmp;
		tmp=tmp2;
	}
	for(int i=x2;i>x1;i--){
		tmp2 = arr[i-1][y1];
		m=min(m,tm2);
		arr[i-1][y1]=tmp;
		tmp=tmp2;
	}
	return m;
}

물론 저는 쉬운 코드도 복잡하게 짜는 재능이 있으니까
혹시라도 보시는 분들은 절대 제 코드 따라하지 말고
알아서 코드를 쳐보시기 바랍니다.
오늘도 1일 1 PS 완료!

profile
인간은 노력하는 한 방황한다

0개의 댓글