https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=cpp#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
행렬을 진짜로 회전시켜서 제일 작은 숫자를 구했다.
첫 번째로 틀린건 회전할때 방향을 잘못해서 1->2->3->4행렬을 회전하니까 1->1->1->1이렇게 됐었다.
두 번째로 틀린건 행렬에서 나온 숫자를 bool형 배열에(n) 체크해서 제일 작은 숫자를 반환하게 했는데
n의 최댓값을 작게 잡아줬었다. 100x100+1 의 크기 이상으로 잡아줘야한다.
#include <string>
#include <vector>
#include<iostream>
using namespace std;
int num[101][101];
int rotation(int x1,int y1, int x2, int y2)
{
//오른쪽으로 : x1은 고정, y1증가
int tmp1=num[x1][y1];
int tmp2=num[x1][y2];
int tmp3=num[x2][y2];
int tmp4=num[x2][y1];
bool n[10002];
for(int i=0;i<10002;i++)
n[i]=false;
n[num[x1][y1]]=true;
n[num[x1][y2]]=true;
n[num[x2][y2]]=true;
n[num[x2][y1]]=true;
for(int j=y2;j>y1;j--)
{
num[x1][j]=num[x1][j-1];
n[num[x1][j-1]]=true;
//cout<<num[x1][j-1]<<endl;
}
//아래로 : y2는 고정 , x1 증가
for(int j=x2;j>x1;j--)
{
num[j][y2]=num[j-1][y2];
n[num[j-1][y2]]=true;
}
//왼쪽으로 : x2는 고정 y2 감소
for(int j=y1;j<y2;j++)
{
num[x2][j]=num[x2][j+1];
n[num[x2][j+1]]=true;
}
//위로 : y1은 고정 x2 감소
for(int j=x1;j<x2;j++)
{
num[j][y1]=num[j+1][y1];
n[num[j+1][y1]]=true;
}
num[x1+1][y2]=tmp2;
num[x2][y2-1]=tmp3;
num[x2-1][y1]=tmp4;
// cout<<num[x1][y1]<<endl;
// cout<<num[x1][y2]<<endl;
// cout<<num[x2][y2]<<endl;
// cout<<num[x2][y1]<<endl;
for(int i=1;i<10001;i++){
if(n[i])
return i;
}
return 0;
}
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
for(int i=1;i<=rows;i++)
for(int j=1;j<=columns;j++)
num[i][j]=(i-1)*columns+j;
// for(int i=1;i<=rows;i++)
// { for(int j=1;j<=columns;j++)
// cout<< num[i][j];
// cout<<endl;
// }
int t=0;
for(int i=0;i<queries.size();i++)
{
t=rotation(queries[i][0],queries[i][1],queries[i][2],queries[i][3]);
answer.push_back(t);
}
return answer;
}
#include <string>
#include <vector>
#include<iostream>
using namespace std;
int num[101][101];
int rotation(int x1,int y1, int x2, int y2)
{
//오른쪽으로 : x1은 고정, y1증가
int tmp1=num[x1][y1];
// int tmp2=num[x1][y2];
// int tmp3=num[x2][y2];
// int tmp4=num[x2][y1];
bool n[10002];
for(int i=0;i<10001;i++)
n[i]=false;
n[num[x1][y1]]=true;
n[num[x1][y2]]=true;
n[num[x2][y2]]=true;
n[num[x2][y1]]=true;
for(int j=x1;j<x2;j++)
{
num[j][y1]=num[j+1][y1];
n[num[j][y1]]=true;
}
for(int j=y1;j<y2;j++)
{
num[x2][j]=num[x2][j+1];
n[num[x2][j]]=true;
}
for(int j=x2;j>x1;j--)
{
num[j][y2]=num[j-1][y2];
n[num[j][y2]]=true;
}
for(int j=y2;j>y1;j--)
{
num[x1][j]=num[x1][j-1];
n[num[x1][j]]=true;
}
num[x1][y1+1]=tmp1;
// for(int i=1;i<=11;i++)
// { for(int j=1;j<=11;j++)
// cout<< num[i][j];
// cout<<endl;
// }
// cout<<num[x1][y1]<<endl;
// cout<<num[x1][y2]<<endl;
// cout<<num[x2][y2]<<endl;
// cout<<num[x2][y1]<<endl;
for(int i=1;i<10001;i++){
if(n[i])
return i;
}
return 0;
}
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
for(int i=1;i<=rows;i++)
for(int j=1;j<=columns;j++)
num[i][j]=(i-1)*columns+j;
// for(int i=1;i<=rows;i++)
// { for(int j=1;j<=columns;j++)
// cout<< num[i][j];
// cout<<endl;
// }
int t=0;
for(int i=0;i<queries.size();i++)
{
t=rotation(queries[i][0],queries[i][1],queries[i][2],queries[i][3]);
answer.push_back(t);
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 수식 최대화 c++ (0) | 2023.04.16 |
---|---|
[프로그래머스] 배달 c++ (0) | 2023.04.01 |
[프로그래머스] 멀쩡한 사각형 c++ (0) | 2023.03.02 |
[프로그래머스] 괄호변환 c++ (0) | 2023.02.24 |
[프로그래머스] 오픈채팅방 c++ (0) | 2023.02.17 |