๐ŸŒฒ Altu-Bitu/๊ตฌํ˜„&์‹œ๋ฎฌ๋ ˆ์ด์…˜

[BOJ S2][C++] ๋ฐฑ์ค€ 3085๋ฒˆ: ์‚ฌํƒ• ๊ฒŒ์ž„

์„ ๋‹ฌ 2022. 11. 7. 16:49
๋ฐ˜์‘ํ˜•

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

 

3085๋ฒˆ: ์‚ฌํƒ• ๊ฒŒ์ž„

์˜ˆ์ œ 3์˜ ๊ฒฝ์šฐ 4๋ฒˆ ํ–‰์˜ Y์™€ C๋ฅผ ๋ฐ”๊พธ๋ฉด ์‚ฌํƒ• ๋„ค ๊ฐœ๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ์–ด๋ ธ์„ ์ ์— "๋ด„๋ณด๋‹ˆ (Bomboni)" ๊ฒŒ์ž„์„ ์ฆ๊ฒจํ–ˆ๋‹ค.

๊ฐ€์žฅ ์ฒ˜์Œ์— N×Nํฌ๊ธฐ์— ์‚ฌํƒ•์„ ์ฑ„์›Œ ๋†“๋Š”๋‹ค. ์‚ฌํƒ•์˜ ์ƒ‰์€ ๋ชจ๋‘ ๊ฐ™์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ๊ทผ์ด๋Š” ์‚ฌํƒ•์˜ ์ƒ‰์ด ๋‹ค๋ฅธ ์ธ์ ‘ํ•œ ๋‘ ์นธ์„ ๊ณ ๋ฅธ๋‹ค. ๊ทธ ๋‹ค์Œ ๊ณ ๋ฅธ ์นธ์— ๋“ค์–ด์žˆ๋Š” ์‚ฌํƒ•์„ ์„œ๋กœ ๊ตํ™˜ํ•œ๋‹ค. ์ด์ œ, ๋ชจ๋‘ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์—ฐ์† ๋ถ€๋ถ„(ํ–‰ ๋˜๋Š” ์—ด)์„ ๊ณ ๋ฅธ ๋‹ค์Œ ๊ทธ ์‚ฌํƒ•์„ ๋ชจ๋‘ ๋จน๋Š”๋‹ค.

์‚ฌํƒ•์ด ์ฑ„์›Œ์ง„ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ๊ทผ์ด๊ฐ€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. (3 ≤ N ≤ 50)

๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๋ณด๋“œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ƒ‰์ƒ์ด ์ฃผ์–ด์ง„๋‹ค. ๋นจ๊ฐ„์ƒ‰์€ C, ํŒŒ๋ž€์ƒ‰์€ P, ์ดˆ๋ก์ƒ‰์€ Z, ๋…ธ๋ž€์ƒ‰์€ Y๋กœ ์ฃผ์–ด์ง„๋‹ค.

์‚ฌํƒ•์˜ ์ƒ‰์ด ๋‹ค๋ฅธ ์ธ์ ‘ํ•œ ๋‘ ์นธ์ด ์กด์žฌํ•˜๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

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

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

using namespace std;

int n;
vector<vector<char>> candy;

int dx[] = {0, 1};
int dy[] = {1, 0};

int countCandy() {
    // ๊ฐ€์žฅ ๊ธด ์—ฐ์† ์‚ฌํƒ•์˜ ๊ฐฏ์ˆ˜ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜
    int max_candy = 0;
    
    // i๋ฒˆ์งธ ํ–‰์˜ ๊ฐ€์žฅ ๊ธด ์—ฐ์† ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for(int i=0; i<n; i++) {
        char prev = candy[i][0];
        int cnt = 1;

        for(int j=1; j<n; j++) {
            if(prev == candy[i][j]) { // ์—ฐ์†
                cnt++;
                max_candy = max(max_candy, cnt);
            } else { // ๋ถˆ์—ฐ์†
                prev = candy[i][j];
                cnt = 1;
            }
        }
    }
    
    // i๋ฒˆ์งธ ์—ด์˜ ๊ฐ€์žฅ ๊ธด ์—ฐ์† ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for(int j=0; j<n; j++) {
        char prev = candy[0][j];
        int cnt = 1;

        for(int i=1; i<n; i++) {
            if(prev == candy[i][j]) {
                cnt++;
                max_candy = max(max_candy, cnt);
            } else {
                prev = candy[i][j];
                cnt = 1;
            }
        }
    }
    
    return max_candy;
}

int solution() {
    int ans = countCandy();
    
    // ๋ชจ๋“  ์‚ฌํƒ•์— ๋Œ€ํ•ด์„œ
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++){
            
            // ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์•„๋ž˜์ชฝ ์‚ฌํƒ•๊ณผ ๊ตํ™˜
            for(int dir=0; dir<2; dir++) {
                int x = i + dx[dir];
                int y = j + dy[dir];
                
                if(x>=n || y>=n)
                    continue;
                if(candy[i][j] == candy[x][y])
                    continue;
                
                swap(candy[i][j], candy[x][y]);
                ans = max(ans, countCandy());
                swap(candy[i][j], candy[x][y]); // ์—ฐ์†๊ฐฏ์ˆ˜ ์ €์žฅํ•ด์ฃผ๊ณ  ๋˜๋Œ๋ฆฌ๊ธฐ
            }
        }
    }
    
    return ans;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    
    cin >> n;
    candy.assign(n, vector<char>(n));
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            cin >> candy[i][j];
    
    cout << solution();
    
    return 0;
}

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