https://school.programmers.co.kr/learn/courses/30/lessons/60059
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
생각해 보기
- key의 오하단이 lock의 좌상단으로 시작해 key의 좌상단 부분이 lock의 우하단으로 올때까지 모든 경우를 훑으며 내려온다.
- lock이 0이고 key가 1인 것도 확인해야 하지만, 둘 다 1인 경우 또한 확인해야 한다.
- key를 오른쪽으로 90도 돌린 뒤 위 과정을 다시 진행한다.
- 위 과정을 4번 반복하면 된다.
코드
#include <string>
#include <vector>
using namespace std;
bool calc(vector<vector<int>> key, vector<vector<int>> lock){
int M = key.size(), N = lock.size();
for(int si=-N;si<N;++si){
for(int sj=-N;sj<N;++sj){
bool flag = true;
for(int i=0;i<N && flag;++i){
for(int j=0;j<N && flag;++j){
int y = si + i;
int x = sj + j;
if(!lock[i][j]){
if(y>=0 && y<M && x>=0 && x<M)
flag = key[y][x];
else
flag = false;
}
else{
if(y>=0 && y<M && x>=0 && x<M && key[y][x])
flag = false;
}
}
}
if(flag)
return true;
}
}
return false;
}
vector<vector<int>> turn(vector<vector<int> > key){
vector<vector<int> > tkey = key;
int M = key.size();
for(int i=0;i<M;++i){
for(int j=M-1,tj=0;j>=0;--j, ++tj){
tkey[i][tj] = key[j][i];
}
}
return tkey;
}
bool solution(vector<vector<int>> key, vector<vector<int>> lock) {
bool answer = false;
for(int i=0;i<4;++i){
answer = calc(key, lock);
if(answer)
return answer;
key = turn(key);
}
return answer;
}

728x90
'알고리즘 > 프로그래머스 문제' 카테고리의 다른 글
| [Level 3] - 스티커 모으기2 (0) | 2023.07.10 |
|---|---|
| [ALGORITHM] LEVEL3 2021 카카오 채용연계형 인턴십 - 표 편집 (0) | 2023.01.06 |
| [ALGORITHM] LEVEL4 2021 카카오 채용연계형 인턴십 - 미로 탈출 (0) | 2023.01.04 |
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 양과 늑대 (0) | 2022.12.30 |
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 (0) | 2022.12.28 |
댓글