๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/-

[๋ฐฑ์ค€]1992๋ฒˆ: ์ฟผ๋“œํŠธ๋ฆฌ

by syLim___ 2023. 5. 15.
728x90

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

 

1992๋ฒˆ: ์ฟผ๋“œํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1 ≤ N ≤ 64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N์˜ ๋ฌธ์ž์—ด์ด N๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜

www.acmicpc.net


์ „ํ˜•์ ์ธ ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ!

 

์ด๋ฒˆ์—๋Š” ์˜ค๋žœ๋งŒ์— C++๋กœ ํ’€์–ด๋ดค๋‹ค.

 

โœ… ๋ฌธ์ œ ํ’€ ๋•Œ ์ฃผ์˜ํ•  ์ 

์•„๋ž˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋“ค ์ •๋„๋งŒ ์ฃผ์˜ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ €๊ฑธ ๊ณ ๋ ค ์•ˆ ํ•ด์„œ ๊ณ ์ƒ ์ข€ ํ–ˆ๋‹ค ๐Ÿฅฒ

 

# input1

2

11

11

# output1

1

 

# input2

2

10

01

# output2

(1001)

 

โœ… ์•„์ด๋””์–ด

 - ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ด 4๊ฐœ ์˜์—ญ์„ ๋‚˜๋ˆ„์–ด์„œ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค.

 - ์˜์—ญ์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ €์žฅํ•œ ๋’ค, ์˜์—ญ์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ํƒ์ƒ‰์„ ์ค‘์ง€ํ•˜๊ณ  ์žฌ๊ท€ํ•œ๋‹ค.

 - ์˜์—ญ์˜ ์ˆซ์ž๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•˜๋ฉด ์ˆซ์ž๋ฅผ ๊ฒฐ๊ณผ string์— ์ €์žฅํ•œ๋‹ค.

 

โœ… ์ œ์ถœ ์ฝ”๋“œ

#include <iostream>
#include <string>
#include <vector>

using namespace std;

char table[64][64];

string quad(int row, int col, int qSize){ // ์‹œ์ž‘ํ–‰, ์‹œ์ž‘์—ด, ์ฒดํฌํ•  ์˜์—ญ ํฌ๊ธฐ
  
  string result; result += '(';

  int area = qSize/2;
  
  int startR[4] = {row, row, row+area, row+area};
  int startC[4] = {col, col+area, col, col+area};

  for(int k=0; k<4; k++){
      //current row, current col
    int cr = startR[k]; int cc = startC[k];
    char first = table[cr][cc];
    bool flag = true;
    for(int i=cr; i<cr+area; i++){
      for(int j=cc; j<cc+area; j++){
        if (table[i][j]!=first){
          result += quad(cr, cc, area);
          flag = false;
          break;
        }
      }
    if (!flag) break;
    }
  if (flag) result += first;
  }
return result+')';
}

int main() {

  // ์ธํ’‹ ์ž…๋ ฅ๋ฐ›๊ณ  ์ €์žฅํ•˜๊ธฐ
  int n; cin >> n;
  for (int i=0; i<n; i++){
    string temp; cin >> temp;
    for (int j=0;j<n;j++){
      table[i][j] = temp[j];
    }
  }

  // ์••์ถ•์ด ํ•œ ๋ฒˆ์— ๋˜๋Š”์ง€ ์ฒดํฌ
  bool flag = true;
  char first = table[0][0];
  for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
      if(first != table[i][j]){
        flag = false; break;
      }
    }
    if (!flag) break;
  }

  // ์••์ถ•์ด ํ•œ ๋ฒˆ์— ๋˜๋ฉด ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  if(flag) cout<<first;
  //๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด quadํ•จ์ˆ˜ ์‹คํ–‰
  else cout << quad(0,0,n);
  
  return 0;
}
728x90