๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 17136๋ฒˆ - ์ƒ‰์ข…์ด ๋ถ™์ด๊ธฐ

by ์•ˆ์ฃผํ˜• 2022. 9. 6.

๋ฌธ์ œ

 

17136๋ฒˆ: ์ƒ‰์ข…์ด ๋ถ™์ด๊ธฐ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์„ ํ•œ ๋‹ค์„ฏ ์ข…๋ฅ˜์˜ ์ƒ‰์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ƒ‰์ข…์ด์˜ ํฌ๊ธฐ๋Š” 1×1, 2×2, 3×3, 4×4, 5×5๋กœ ์ด ๋‹ค์„ฏ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ ์ข…๋ฅ˜์˜ ์ƒ‰์ข…์ด๋Š” 5๊ฐœ์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. <๊ทธ๋ฆผ 1> ์ƒ‰์ข…์ด๋ฅผ ํฌ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <memory.h>

using namespace std;

int N = 10, ans = 1e9;
int map[10][10];
int paper_cnt;
int blank_cnt;
int paper_sum[6] = {5, 5, 5, 5, 5, 5};

bool paper_attach(int x, int y, int size){
    for(int i = x; i < x+size; i++){
        for(int k = y; k < y+size; k++){
            if(i >= 10 || k >= 10 || map[i][k] == 0) return false;
        }
    }
    for(int i = x; i < x+size; i++){
        for(int k = y; k < y+size; k++){
            if(map[i][k] == 1){
                blank_cnt--;
                map[i][k] = 0;
            }
        }
    }
    return true;
}

void backtracking(int x, int y){
    if(blank_cnt == 0){
        ans = min(ans, paper_cnt);
        return;
    }
    
    if(y == 10){
        x += 1;
        y = 0;
    }
    
    if(x == 10) return;
    
    int memory_arr[10][10];
    memcpy(memory_arr, map, sizeof(memory_arr));
    int memory_blank_cnt = blank_cnt;
    
    if(map[x][y] == 1){
        for(int i=5; i>=1; i--){
            if(paper_sum[i] > 0){
                if(paper_attach(x, y, i)){
                    paper_cnt++;
                    paper_sum[i]--;
                    backtracking(x, y + 1);
                    blank_cnt = memory_blank_cnt;
                    paper_sum[i]++;
                    paper_cnt--;
                    memcpy(map, memory_arr, sizeof(map));
                }
            }
        }
    }
    else backtracking(x, y+1);
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    for(int i=0; i<N; i++){
        for(int k=0; k<N; k++){
            cin>>map[i][k];
            if(map[i][k] == 1) blank_cnt++;
        }
    }
    
    backtracking(0, 0);
    
    if(ans == 1e9) cout<<-1;
    else cout<<ans;
}

 

ํ’€์ด

๋ฌธ์ œ๋ฅผ ๋Œ€์ถฉ ์ฝ๊ณ .. ์ƒ‰์ข…์ด๋ฅผ 5๊ฐœ์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์กฐ๊ฑด๊ณผ, 0์ด ์ ํžŒ ์นธ์—๋Š” ์ƒ‰์ข…์ด๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ์กฐ๊ฑด์„ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๊ณ  ํ’€์–ด์„œ ์กฐ๊ธˆ ํ—ค๋งค์—ˆ์Šต๋‹ˆ๋‹ค.

์ข…์ด๊ฐ€ 1์ธ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ๋ฐฑํŠธ๋ž™ํ‚น์„ ๋„๋Š”๋ฐ ํ•ญ์ƒ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์ ์œผ๋กœ ์žก๊ณ  ์ƒ‰์ข…์ด๋ฅผ ๋ถ™์—ฌ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

[๋ฐฑ์ค€,c++] 14712๋ฒˆ - ๋„ด๋ชจ๋„ด๋ชจ (Easy)

๋ฌธ์ œ 14712๋ฒˆ: ๋„ด๋ชจ๋„ด๋ชจ (Easy) ๋„ค๋ชจ๋Š” ๋ฟŒ××× ๊ฒŒ์ž„์— ๊นŠ์€ ๊ฐ๋ช…์„ ๋ฐ›์•„, ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ๊ฒฉ์žํŒ๊ณผ “๋„ด๋ชจ”๋ผ๋Š” ์ˆ˜์ˆ˜๊ป˜๋ผ์˜ ์ƒ๋ฌผ์„ ์ด์šฉํ•˜๋Š” “๋„ด๋ชจ๋„ด๋ชจ”๋ผ๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ๊ฒŒ์ž„์˜ ๊ทœ์น™

dkswnkk.tistory.com

์œ„ ๋ฌธ์ œ์˜ ํ’€์ด์—์„œ ์ƒ‰์ข…์ด๋ฅผ ๋ถ™์ด๋Š” ์กฐ๊ฑด๋งŒ ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€