๐Ÿ•๏ธ ICPC Sinchon/Backtracking

[BOJ][C++] ๋ฐฑ์ค€ 2661๋ฒˆ: ์ข‹์€์ˆ˜์—ด

์„ ๋‹ฌ 2023. 1. 22. 04:58
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2661

 

2661๋ฒˆ: ์ข‹์€์ˆ˜์—ด

์ฒซ ๋ฒˆ์งธ ์ค„์— 1, 2, 3์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ N์ธ ์ข‹์€ ์ˆ˜์—ด๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. ์ˆ˜์—ด์„ ์ด๋ฃจ๋Š” 1, 2, 3๋“ค ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์ˆซ์ž 1, 2, 3์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง€๋Š” ์ˆ˜์—ด์ด ์žˆ๋‹ค. ์ž„์˜์˜ ๊ธธ์ด์˜ ์ธ์ ‘ํ•œ ๋‘ ๊ฐœ์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ๋™์ผํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด, ๊ทธ ์ˆ˜์—ด์„ ๋‚˜์œ ์ˆ˜์—ด์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ์ˆ˜์—ด์€ ์ข‹์€ ์ˆ˜์—ด์ด๋‹ค.

๋‹ค์Œ์€ ๋‚˜์œ ์ˆ˜์—ด์˜ ์˜ˆ์ด๋‹ค.

  • 33
  • 32121323
  • 123123213

๋‹ค์Œ์€ ์ข‹์€ ์ˆ˜์—ด์˜ ์˜ˆ์ด๋‹ค.

  • 2
  • 32
  • 32123
  • 1232123

๊ธธ์ด๊ฐ€ N์ธ ์ข‹์€ ์ˆ˜์—ด๋“ค์„ N์ž๋ฆฌ์˜ ์ •์ˆ˜๋กœ ๋ณด์•„ ๊ทธ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 1213121๊ณผ 2123212๋Š” ๋ชจ๋‘ ์ข‹์€ ์ˆ˜์—ด์ด์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด์€ 1213121์ด๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ์ˆซ์ž Nํ•˜๋‚˜๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. N์€ 1 ์ด์ƒ 80 ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— 1, 2, 3์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ N์ธ ์ข‹์€ ์ˆ˜์—ด๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์—ด๋งŒ ์ถœ๋ ฅํ•œ๋‹ค. ์ˆ˜์—ด์„ ์ด๋ฃจ๋Š” 1, 2, 3๋“ค ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค.

 

ํ’€์ด

๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ 1์ด๋‚˜ 2๋‚˜ 3์„ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ๋“ค์„ ๋‹ค ์‚ดํŽด๋ณด๋ฉด๋œ๋‹ค

์ด๋•Œ ์ข‹์€ ์ˆ˜์—ด ํŒ๋‹จ ๊ธฐ์ค€์„ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ๊ฝค ๊นŒ๋‹ค๋กœ์› ๋Š”๋ฐ, dp๊ฐœ๋…์„ ์ ์šฉํ•ด๋ณด์ž.

์ด์ „ ์ˆ˜์—ด์ด ์ข‹์€ ์ˆ˜์—ด์ด์˜€๋‹ค๋ฉด ์ดํ›„ ์ˆ˜์—ด์€ ์ถ”๊ฐ€๋œ ์ˆซ์ž๋ถ€๋ถ„๋งŒ ์ œ์™ธํ•˜๋ฉด ์ข‹์€ ์ˆ˜์—ด์ด๋‹ค. (์ด ๋ถ€๋ถ„์€ ํŒ๋‹จํ•  ํ•„์š” ์—†์Œ)

๋งจ ๋’ค ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ๋ถ€๋ถ„์ˆ˜์—ด๋งŒ ๊ฒน์น˜๋Š”๊ฒŒ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋ฉด ๋œ๋‹ค.

๋ถ€๋ถ„์ˆ˜์—ด์€ substr์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

int n;
string ans;

bool isGood(string num, int cnt) {
    for(int i=1; i<=cnt/2; i++) {
        string s1 = num.substr(cnt-i, i);
        string s2 = num.substr(cnt-i*2, i);
        
        if(s1==s2)
            return false;
    }
    return true;
}

void recur(string num, int cnt) {
    // ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ข‹์€์ˆ˜์—ด์ด ์•„๋‹ˆ๋ผ๋ฉด ํŒจ์Šค
    if(ans!="")
        return;
    if(!isGood(num, cnt))
        return;
    
    // ๊ฐฏ์ˆ˜ ๋‹ค ์ฑ„์› ์œผ๋ฉด ๋ฐ˜ํ™˜
    if(cnt == n) {
        ans = num;
        return;
    }
    
    // ์žฌ๊ท€ (๋ฐฑํŠธ๋ž˜ํ‚น)
    for(int i=0; i<n; i++) {
        recur(num+"1", cnt+1);
        recur(num+"2", cnt+1);
        recur(num+"3", cnt+1);
    }
    
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    cin >> n;
    
    recur("", 0);
    
    cout << ans;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•