[์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„] ์นด์นด์˜ค 2020 Recruitment ๋ฌธ์ œ :: ์ž๋ฌผ์‡ ์™€ ์—ด์‡ 

์ž๋ฌผ์‡ ์™€ ์—ด์‡ 

๋ฌธ์ œ

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;
}

 

ํ’€์ด

ํ’€์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ๊ณ ๊ณผ์ •์œผ๋กœ ์ƒ๊ฐํ•˜์˜€๋‹ค.

  1. ์™„์ „ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ์ง€ ๋ณด์ž.
  2. ์ž…๋ ฅ M๊ณผ N์€ 20์ดํ•˜์ด๋‹ค.
  3. 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๊ฐ€ ๋‚˜์˜จ๋‹ค.

  1. 4๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ ๊ณ ๋ คํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ 4๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด key๊ฐ€ ๋งž๋Š”์ง€ ๋ชจ๋‘ ํŒ๋‹จํ•ด์•ผํ•˜๋ฏ€๋กœ, 4๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด 13,456์ด๋‹ค.

  1. ๊ฐ ๊ฒฝ์šฐ์— key๊ฐ€ ์ ํ•ฉํ•œ ์ง€ ํ™•์ธํ•˜๋Š” ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

key๊ฐ€ ์ ํ•ฉํ•œ ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด lock์ด ๋ชจ๋‘ ์ฑ„์›Œ์ ธ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋˜๋ฏ€๋กœ, lock์˜ ์ตœ๋Œ€ ๊ฐ€๋กœ/์„ธ๋กœ ๊ธธ์ด์ธ 20์„ ์ œ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. for๋ฌธ์„ 2๋ฒˆ ์ค‘์ฒฉํ•ด์„œ ํ™•์ธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„์ด๋‹ค.

400์„ 13,456๊ณผ ๊ณฑํ•ด์ฃผ๋ฉด 5,382,400๊ฐ€ ๋˜๊ณ  ์ด๋Š” 10^7๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ์ƒ ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์ธ๋‹ค.


๋งŒ์•ฝ ์™„์ „ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผํ–ˆ๊ฒ ์ง€๋งŒ ๋‹คํ–‰ํžˆ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์œ„์˜ ์‚ฌ๊ณ ํ๋ฆ„๋Œ€๋กœ ์ฝ”๋“œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ธฐ์ˆ ํ•ด๋ณด์ž.

  • for๋ฌธ ๋Œ๋ฉด์„œ ์‹œ๊ณ„๋ฐฉํ–ฅ 4ํšŒ์ „
    • ์ค‘์ฒฉ for๋ฌธ ๋Œ๋ฉด์„œ ์ขŒ=>์šฐ
      • ์ค‘์ฒฉ for๋ฌธ ์ค‘์ฒฉ์œผ๋กœ ๋Œ๋ฉด์„œ ์œ„ => ์•„๋ž˜
        • ํ‚ค๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธ (๋”ํ•ด์„œ 1์ด ์•ˆ๋˜๋ฉด break)

๊ฒฐ๊ตญ ํšŒ์ „ํ•˜๊ณ  ์ด๋™์‹œํ‚ค๋ฉด์„œ key์™€ lock์„ ๋”ํ–ˆ์„ ๋•Œ, lock์ด ๋ชจ๋‘ 1์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

๋‹ค ๋น„์Šทํ•˜๊ฒŒ ํ‘ผ ๋“ฏํ•˜๋‹ค. ๋‹ค๋งŒ ๋‚˜์˜ ๊ฒฝ์šฐ ํ‘ธ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋Š๋ ธ๋‹ค. ์ด์œ ๋Š” ์ฝ”๋“œ๋ฅผ ๋Œ€์ถฉ ์ž‘์„ฑํ•˜๊ณ  ์˜ค๋ฅ˜ ๊ฐœ์„ ์— ์‹œ๊ฐ„์„ ๋งŽ์ด ํ• ์• ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฃผ์˜ํ•˜์ž!

๋ฐ˜์‘ํ˜•