𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 3085번: 사탕 κ²Œμž„ - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 3085번: 사탕 κ²Œμž„ - C++

.23 2022. 2. 18. 17:25
문제

μƒκ·Όμ΄λŠ” 어렸을 적에 "λ΄„λ³΄λ‹ˆ (Bomboni)" κ²Œμž„μ„ μ¦κ²¨ν–ˆλ‹€.

κ°€μž₯ μ²˜μŒμ— N×N크기에 사탕을 μ±„μ›Œ λ†“λŠ”λ‹€. μ‚¬νƒ•μ˜ 색은 λͺ¨λ‘ 같지 μ•Šμ„ μˆ˜λ„ μžˆλ‹€. μƒκ·Όμ΄λŠ” μ‚¬νƒ•μ˜ 색이 λ‹€λ₯Έ μΈμ ‘ν•œ 두 칸을 κ³ λ₯Έλ‹€. κ·Έ λ‹€μŒ κ³ λ₯Έ 칸에 λ“€μ–΄μžˆλŠ” 사탕을 μ„œλ‘œ κ΅ν™˜ν•œλ‹€. μ΄μ œ, λͺ¨λ‘ 같은 μƒ‰μœΌλ‘œ 이루어져 μžˆλŠ” κ°€μž₯ κΈ΄ 연속 λΆ€λΆ„(ν–‰ λ˜λŠ” μ—΄)을 κ³ λ₯Έ λ‹€μŒ κ·Έ 사탕을 λͺ¨λ‘ λ¨ΉλŠ”λ‹€.

사탕이 μ±„μ›Œμ§„ μƒνƒœκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 상근이가 먹을 수 μžˆλŠ” μ‚¬νƒ•μ˜ μ΅œλŒ€ 개수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 쀄에 λ³΄λ“œμ˜ 크기 N이 주어진닀. (3 ≤ N ≤ 50)

λ‹€μŒ N개 μ€„μ—λŠ” λ³΄λ“œμ— μ±„μ›Œμ Έ μžˆλŠ” μ‚¬νƒ•μ˜ 색상이 주어진닀. 빨간색은 C, νŒŒλž€μƒ‰μ€ P, μ΄ˆλ‘μƒ‰μ€ Z, λ…Έλž€μƒ‰μ€ Y둜 주어진닀.

μ‚¬νƒ•μ˜ 색이 λ‹€λ₯Έ μΈμ ‘ν•œ 두 칸이 μ‘΄μž¬ν•˜λŠ” μž…λ ₯만 주어진닀.

 

좜λ ₯

첫째 쀄에 상근이가 먹을 수 μžˆλŠ” μ‚¬νƒ•μ˜ μ΅œλŒ€ 개수λ₯Ό 좜λ ₯ν•œλ‹€.


μ™„μ „νƒμƒ‰λ¬Έμ œ.. 사싀 완전탐색이 뭔지 μ–΄λ–»κ²Œ 접근해야될지 아직 잘 λͺ¨λ₯΄κ² λ‹€.γ… γ…  κ΅¬κΈ€μ˜ νž˜μ„ 빌렀 이해...

λ‹€μŒκ³Ό 같은 μˆœμ„œλ‘œ ν’€μ—ˆλ‹€.

 

행끼리 κ΅ν™˜

    1. arr[i][j]와 arr[i][j + 1]을 κ΅ν™˜

    2. κ°€μž₯ κΈ΄ ν–‰ λ˜λŠ” μ—΄ 확인

    3. λ‹€μ‹œ 원상볡ꡬ

열끼리 κ΅ν™˜

    1. arr[i][j]와 arr[i + 1][j]을 κ΅ν™˜

    2. κ°€μž₯ κΈ΄ ν–‰ λ˜λŠ” μ—΄ 확인

    3. λ‹€μ‹œ 원상볡ꡬ

 

ν•˜μ—¬ 먹을 수 μžˆλŠ” μ΅œλŒ€ 사탕 개수λ₯Ό κ΅¬ν•˜λ©΄ λœλ‹€.

 

μ½”λ“œ
#include <iostream>
#include <algorithm>
#define MAX 51

using namespace std;
int N, maxCandy = 0;
char candy[MAX][MAX];

void check();

int main(void) {
    cin >> N;

    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            cin >> candy[i][j];
        }
    }
    
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < N - 1; j++) {
            swap(candy[i][j], candy[i][j + 1]);
            check();
            swap(candy[i][j], candy[i][j + 1]);
        }
    }

    for(int j = 0; j < N; j++) {
        for(int i = 0; i < N - 1; i++) {
            swap(candy[i][j], candy[i + 1][j]);
            check();
            swap(candy[i][j], candy[i + 1][j]);
        }
    }

    cout << maxCandy << '\n';

    return 0;
}

void check() {
    for(int i = 0; i < N; i++) {
        int count = 1;
        for(int j = 0; j < N; j++) {
            if(candy[i][j] == candy[i][j + 1]) {
                count++;
            }
            else {
                if(maxCandy < count) maxCandy = count;
                count = 1;
            }
        }
    }

    for(int j = 0; j < N; j++) {
        int count = 1;
        for(int i = 0; i < N; i++) {
            if(candy[i][j] == candy[i + 1][j]) {
                count++;
            }
            else {
                if(maxCandy < count) maxCandy = count;
                count = 1;
            }
        }
    }
}
Comments