https://school.programmers.co.kr/learn/courses/30/lessons/60059
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 3. ์นด์นด์ค ์ฝํ ๊ธฐ์ถ ๋ฌธ์ ์ด๋ค
๋จ์ ๊ตฌํ์ธ ๋ฏ
์ฒ์์๋ ์์ฒญ ์ด๋ ค์ ๋ณด์๋๋ฐ, ๋จ๊ณ๋ณ๋ก ์ธ๋ถํํด์ ์๊ฐํ๋๊น ๋ฐฉ๋ฒ์ด ๋ณด์๋ค!
1. key๋ฅผ lock ์์ ๊ฒน์น๋ฉด์ ํ๋ฒ์ฉ ๋น๊ตํด์ผ ํ๋ฏ๋ก
key์ ์ผ๋ถ๊ฐ lock ๋ฒ์ ๋ฐ์ ์์ด๋ ์์ ํ๋๋ก lock์ ์์ญ์ ๋ํ์ค๋ค. (bigLock ๋ณ์ ์์ฑ)
2. key ํ์
3. key๋ฅผ bigLock ์์ ์ฌ๋ ค์ ์ฌ๋ผ์ด๋ฉํ๋ ํ์์ผ๋ก ๋น๊ต
4. ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก, ๊ฐ๋ฅํ๋ค๊ณ ํ๋จ๋๋ฉด ์ฆ์ return true
์ด์ฐจ์๋ฐฐ์ด ํ์ ์ํค๋ ๊ฒ ์ด๋ ต๋ค๊ณ ์๊ฐํ์๋๋ฐ, ๋ง์ ๊ตฌํํด๋ณด๋๊น ๋ณ ๊ฑฐ ์๋์๋ค...!
๋์ ํ์ด
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<vector<int>> Key;
vector<vector<int>> Lock;
int keySize;
int lockSize;
int bigSize;
vector<vector<int>> bigLock;
// key๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ํจ์
void turnKey(){
vector<vector<int>> k;
for(int i=0; i<keySize; ++i){
vector<int> tmp;
for(int j=0; j<keySize; ++j){
tmp.push_back(Key[keySize-1-j][i]);
}
k.push_back(tmp);
}
Key = k;
}
// key ํ์ ์ดํ lock๊ณผ ๋น๊ตํ๋ ํจ์
bool findKey(int i, int j){
vector<vector<int>> big(bigLock);
bool isMatch = true;
// lock 0 ์ด key 0์ด๋ฉด false
// lock 1์ด key 1์ด๋ฉด false
// ๋ชจ๋ lock 0์ด ์ฑ์์ง๋ฉด true
for(int a=0; a<keySize; ++a){
for(int b=0; b<keySize; ++b){
if(bigLock[i+a][j+b]==-1) continue;
if(bigLock[i+a][j+b]==0){
if(Key[a][b]==1){
// ์ผ์น ์ 99 ๋ฃ์ด์ฃผ๊ธฐ
big[i+a][j+b] = 99;
}
else {
isMatch = false; break;
}
}
if(bigLock[i+a][j+b]==1 && Key[a][b]==1){
isMatch = false; break;
}
if(!isMatch) break;
}
}
for(int i=keySize; i<lockSize+keySize; ++i){
for(int j=keySize; j<lockSize+keySize; ++j){
if(big[i][j]==0) return false;
}
}
return true;
}
bool solution(vector<vector<int>> key, vector<vector<int>> lock) {
bool answer = true;
Key = key;
Lock = lock;
keySize = key.size();
lockSize = lock.size();
bigSize = lockSize+2*keySize;
// lock ์์ญ ๋ํ๊ธฐ
for(int i=0; i<bigSize; ++i){
vector<int> v;
for(int j=0; j<bigSize; ++j){
if(i>=keySize && i<keySize+lockSize
&& j>=keySize && j<keySize+lockSize){
v.push_back(lock[i-keySize][j-keySize]);
continue;
}
v.push_back(-1); // ๋ฐ๊นฅ ๋ฒ์์๋ -1์ ์ฑ์
}
bigLock.push_back(v);
}
for(int t=0; t<4; ++t){
if(t>0){
turnKey(); // ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์
}
for(int i=1; i<lockSize+keySize; ++i){
for(int j=1; j<lockSize+keySize; ++j){
if(findKey(i, j)) return true;
}
}
}
return false;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/PGS] Lv.2 : ์ง๊ฒ์ฐจ์ ํฌ๋ ์ธ (0) | 2025.06.12 |
---|---|
[C++/PGS] Lv.1 : [PCCE ๊ธฐ์ถ๋ฌธ์ ] 10๋ฒ / ๊ณต์ (0) | 2025.06.11 |
[C++/PGS] Lv.1 : ํ๋ฐฐ ์์ ๊บผ๋ด๊ธฐ (0) | 2025.06.04 |
[C++/PGS] Lv.2 : ์ซ์ ๋ณํํ๊ธฐ (0) | 2025.05.31 |
[C++/PGS] Lv.3 : ํฉ์น ํ์ ์๊ธ (BFS/๋ค์ต์คํธ๋ผ) (0) | 2025.05.24 |