์๋ฌผ์ ์ ์ด์
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/60059#
๋ฌธ์ ์ค๋ช
๊ณ ๊ณ ํ์์ธ ํ๋ธ๋ ๊ณ ๋ ์ ์ ์ง์์ ๋ณด๋ฌผ๊ณผ ์ ์ ์ด ๊ฐ๋ํ ๊ฒ์ผ๋ก ์ถ์ ๋๋ ๋น๋ฐ์ ๋ฌธ์ ๋ฐ๊ฒฌํ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌธ์ ์ด๋ ค๊ณ ์ดํด๋ณด๋ ํน์ดํ ํํ์ ์๋ฌผ์ ๋ก ์ ๊ฒจ ์์๊ณ ๋ฌธ ์์๋ ํน์ดํ ํํ์ ์ด์ ์ ํจ๊ป ์๋ฌผ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํด ์ฃผ๋ ์ข ์ด๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
์ ๊ฒจ์๋ ์๋ฌผ์ ๋ ๊ฒฉ์ ํ ์นธ์ ํฌ๊ธฐ๊ฐ 1 x 1์ธ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐ ๊ฒฉ์ ํํ์ด๊ณ ํน์ดํ ๋ชจ์์ ์ด์ ๋ M x M ํฌ๊ธฐ์ธ ์ ์ฌ๊ฐ ๊ฒฉ์ ํํ๋ก ๋์ด ์์ต๋๋ค.
์๋ฌผ์ ์๋ ํ์ด ํ์ฌ ์๊ณ ์ด์ ๋ํ ํ๊ณผ ๋๊ธฐ ๋ถ๋ถ์ด ์์ต๋๋ค. ์ด์ ๋ ํ์ ๊ณผ ์ด๋์ด ๊ฐ๋ฅํ๋ฉฐ ์ด์ ์ ๋๊ธฐ ๋ถ๋ถ์ ์๋ฌผ์ ์ ํ ๋ถ๋ถ์ ๋ฑ ๋ง๊ฒ ์ฑ์ฐ๋ฉด ์๋ฌผ์ ๊ฐ ์ด๋ฆฌ๊ฒ ๋๋ ๊ตฌ์กฐ์ ๋๋ค. ์๋ฌผ์ ์์ญ์ ๋ฒ์ด๋ ๋ถ๋ถ์ ์๋ ์ด์ ์ ํ๊ณผ ๋๊ธฐ๋ ์๋ฌผ์ ๋ฅผ ์ฌ๋ ๋ฐ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, ์๋ฌผ์ ์์ญ ๋ด์์๋ ์ด์ ์ ๋๊ธฐ ๋ถ๋ถ๊ณผ ์๋ฌผ์ ์ ํ ๋ถ๋ถ์ด ์ ํํ ์ผ์นํด์ผ ํ๋ฉฐ ์ด์ ์ ๋๊ธฐ์ ์๋ฌผ์ ์ ๋๊ธฐ๊ฐ ๋ง๋์๋ ์๋ฉ๋๋ค. ๋ํ ์๋ฌผ์ ์ ๋ชจ๋ ํ์ ์ฑ์ ๋น์ด์๋ ๊ณณ์ด ์์ด์ผ ์๋ฌผ์ ๋ฅผ ์ด ์ ์์ต๋๋ค.
์ด์ ๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด key์ ์๋ฌผ์ ๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด lock์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด์ ๋ก ์๋ฌผ์ ๋ฅผ ์ด์ ์์ผ๋ฉด true๋ฅผ, ์ด ์ ์์ผ๋ฉด false๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- key๋ M x M(3 ≤ M ≤ 20, M์ ์์ฐ์)ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ด์ ๋๋ค.
- lock์ N x N(3 ≤ N ≤ 20, N์ ์์ฐ์)ํฌ๊ธฐ 2์ฐจ์ ๋ฐฐ์ด์ ๋๋ค.
- M์ ํญ์ N ์ดํ์ ๋๋ค.
- key์ lock์ ์์๋ 0 ๋๋ 1๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- 0์ ํ ๋ถ๋ถ, 1์ ๋๊ธฐ ๋ถ๋ถ์ ๋ํ๋ ๋๋ค.
์ฝ๋
#include <string>
#include <vector>
using namespace std;
void turn90(vector<vector<int>> & arr){
// 90๋ ํ์
vector<vector<int>> tmp(arr.size(), vector<int>(arr.size(),-1));
for(int i=0; i<arr.size(); i++){
for(int j=0; j<arr.size(); j++){
tmp[j][arr.size()-1-i] = arr[i][j];
}
}
arr = tmp;
}
bool isItFit(vector<vector<int>>& key,vector<vector<int>>& lock, int x, int y){
// ํด๋น key๊ฐ lock์ ๋ง๋์ง ํ์ธํ๋ ํจ์
vector<vector<int>> tmp(lock);
// ํ์ธ์ ์ํ ์์์ vector
for(int i=0; i<key.size(); i++){
for(int j=0; j<key.size(); j++){
if(y+j<0 || x+i<0 || y+j>=lock.size() || x+i>=lock.size())
// lock์ ๋ฒ์ด๋ key ๋ฒ์
continue;
tmp[y+j][x+i]=key[j][i]+lock[y+j][x+i];
// ๊ฒน์น๋ ๋ถ๋ถ์ ๊ณ์ฐํด์ ๋ฐ์
}
}
for(int i=0; i<lock.size(); i++){
for(int j=0; j<lock.size(); j++){
// ๊ฒฐ๊ตญ tmp์๋ ๊ธฐ์กด์ lock์์ ๊ฒน์น๋ ๋ถ๋ถ๋ง ์๋ก ๊ณ์ฐ๋์ด๋์ด => key๊ฐ ๋ง๋ค๋ฉด ๋ชจ๋ ์๊ฐ 1์ด์ด์ผํจ
if(tmp[j][i]!=1)
return false;
}
}
return true;
}
bool solution(vector<vector<int>> key, vector<vector<int>> lock) {
int size = lock.size();
int ksize = key.size();
for(int i=0; i<4; i++){ // ๋ฐฉํฅ
for(int j=-ksize; j<size+ksize; j++){ // ๊ฐ๋ก
for(int k=-ksize; k<size+ksize; k++){ // ์ธ๋ก
if(isItFit(key, lock, j, k))
return true;
}
}
turn90(key); // ํ์
}
return false;
}
ํ์ด
ํ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๊ณ ๊ณผ์ ์ผ๋ก ์๊ฐํ์๋ค.
- ์์ ํ์์ด ๊ฐ๋ฅํ ์ง ๋ณด์.
- ์ ๋ ฅ M๊ณผ N์ 20์ดํ์ด๋ค.
- key๋ ํ ์ค๋ง ๊ฒน์น ์๋ ์์ผ๋ฏ๋ก, ์ข์ฐ / ์์๋ ๊ฐ ๊ฐ๊ฐ 58๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋์ฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์๋์ key์ lock์ด ์์ ๋, key๋ฅผ ๋ง์ถ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ (or ์๊ณ๋ฐฉํฅ์ผ๋ก 270๋ ํ์ ) ํ ์ค๋ฅธ์ชฝ์ผ๋ก 2์นธ ์ผ์ชฝ์ผ๋ก 2์นธ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐ๋ผ์, ์์ ์์ฒ๋ผ key๋ lock๊ณผ ๊ฒน์ณค์ ๋๋ฅผ ๊ธฐ์ค(0)์ผ๋ก ์ํ, ์ข์ฐ ๋ฐฉํฅ์ผ๋ก -2 ~ 2 ๊น์ง ์ด๋ํ ์ ์๋ค.
์ฆ, ์ต๋์ M, N์ธ 20์ ์๊ฐํ๋ฉด ์ํ์ข์ฐ๋ก 19์นธ์ฉ ๋ ๊ฐ ์ ์์ผ๋๊น 20+19x2์ ๊ฒฝ์ฐ์ ์์ธ 58์ ๊ฒฝ์ฐ์ ์๊ฐ ์ํ, ์ข์ฐ์ ๊ฐ๊ฐ ์๊ธฐ๊ณ ์ด๋ฅผ ๊ณฑํ๋ฉด ์ ์ฒด ๊ฒฝ์ฐ์ ์์ธ 58^2 = 3364๊ฐ ๋์จ๋ค.
- 4๊ฐ์ง ๋ฐฉํฅ์ ๋ํด์ ๊ณ ๋ คํ๋ค.
์ฌ๊ธฐ์ 4๊ฐ์ง ๋ฐฉํฅ์ ๋ํด key๊ฐ ๋ง๋์ง ๋ชจ๋ ํ๋จํด์ผํ๋ฏ๋ก, 4๋ฅผ ๊ณฑํด์ฃผ๋ฉด 13,456์ด๋ค.
- ๊ฐ ๊ฒฝ์ฐ์ key๊ฐ ์ ํฉํ ์ง ํ์ธํ๋ ํ์ธํด์ผํ๋ค.
key๊ฐ ์ ํฉํ ์ง ํ์ธํ๋ ค๋ฉด lock์ด ๋ชจ๋ ์ฑ์์ ธ์๋์ง ํ์ธํ๋ฉด ๋๋ฏ๋ก, lock์ ์ต๋ ๊ฐ๋ก/์ธ๋ก ๊ธธ์ด์ธ 20์ ์ ๊ณฑํด์ฃผ๋ฉด ๋๋ค. for๋ฌธ์ 2๋ฒ ์ค์ฒฉํด์ ํ์ธํ๋ค๊ณ ๊ฐ์ ํ์ ๋์ ์๊ฐ๋ณต์ก๋์ด๋ค.
400์ 13,456๊ณผ ๊ณฑํด์ฃผ๋ฉด 5,382,400๊ฐ ๋๊ณ ์ด๋ 10^7๋ณด๋ค ์์ผ๋ฏ๋ก ์๊ฐ๋ณต์ก๋ ์ ๋ฌธ์ ๊ฐ ์์ด๋ณด์ธ๋ค.
๋ง์ฝ ์์ ํ์์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผํ๊ฒ ์ง๋ง ๋คํํ๋ ๊ฐ๋ฅํ๋ค.
์์ ์ฌ๊ณ ํ๋ฆ๋๋ก ์ฝ๋ ๋ณํํ๋ ๊ณผ์ ์ ๊ธฐ์ ํด๋ณด์.
- for๋ฌธ ๋๋ฉด์ ์๊ณ๋ฐฉํฅ 4ํ์
- ์ค์ฒฉ for๋ฌธ ๋๋ฉด์ ์ข=>์ฐ
- ์ค์ฒฉ for๋ฌธ ์ค์ฒฉ์ผ๋ก ๋๋ฉด์ ์ => ์๋
- ํค๊ฐ ๋ง๋์ง ํ์ธ (๋ํด์ 1์ด ์๋๋ฉด break)
- ์ค์ฒฉ for๋ฌธ ์ค์ฒฉ์ผ๋ก ๋๋ฉด์ ์ => ์๋
- ์ค์ฒฉ for๋ฌธ ๋๋ฉด์ ์ข=>์ฐ
๊ฒฐ๊ตญ ํ์ ํ๊ณ ์ด๋์ํค๋ฉด์ key์ lock์ ๋ํ์ ๋, lock์ด ๋ชจ๋ 1์ด๋ฉด true๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ ํ์ด
๋ค ๋น์ทํ๊ฒ ํผ ๋ฏํ๋ค. ๋ค๋ง ๋์ ๊ฒฝ์ฐ ํธ๋ ์๊ฐ์ด ๋๋ฌด ๋๋ ธ๋ค. ์ด์ ๋ ์ฝ๋๋ฅผ ๋์ถฉ ์์ฑํ๊ณ ์ค๋ฅ ๊ฐ์ ์ ์๊ฐ์ ๋ง์ด ํ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฃผ์ํ์!
Comment