🖥️ CS/Baekjoon Algorithms

#3085번 사탕 게임 (C++)

한국의 메타몽 2021. 3. 3. 03:10

문제 링크 : www.acmicpc.net/problem/3085

3085번: 사탕 게임

첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다.

www.acmicpc.net

문제 풀이는 다음과 같다.

1. 가로, 세로 별로 Brutce Force를 통해 두 자리씩 자리를 바꿨을때 나오는 함수(go)를 구현해준다.

2. go를 통해 최대값을 갱신해준다. 

 

#include <iostream>
#include <algorithm> 
#include <vector>

using namespace std;

int n=0, maxi=0;

void go(vector<string> &v){
    int temp = 1;
    // 가로
    for(int i=0; i<n; i++){
        for(int j=0; j<n-1; j++){
            if(v[i][j]==v[i][j+1]) temp++;
            else temp = 1;
            if(temp>maxi) maxi = temp;
        }
        temp = 1;
    }
    // 세로
    for(int j=0; j<n; j++){
        for(int i=0; i<n-1; i++){
            if(v[i][j]==v[i+1][j]) temp++;
            else temp = 1;
            if(temp>maxi) maxi = temp;
        }
        temp = 1;
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    cin >> n;
    vector<string> v(n);
    for(int i=0; i<n; i++){
        cin >> v[i];
    }
    // 가로
    for(int i=0; i<n; i++){
        for(int j=0; j<n-1; j++){
            swap(v[i][j], v[i][j+1]);
            go(v);
            swap(v[i][j], v[i][j+1]);
        }
    }
    // 세로
    for(int j=0; j<n; j++){
        for(int i=0; i<n-1; i++){
            swap(v[i][j], v[i+1][j]);
            go(v);
            swap(v[i][j], v[i+1][j]);
        }
    }
    cout << maxi << "\n";
    return 0;
}

 

 

그다지 어려울건 없는 문제였는데, 아래 코드에서 문자열을 저장하는 과정에서 몇 차례 실수는 발생시켰다.

    vector<string> v(n);
    for(int i=0; i<n; i++){
        cin >> v[i];
    }

분명 더 간결하고 빠르게 구하는 공식이 있겠지만 최대한 빨리 푸는 방법에만 집중했다.

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#17136번 색종이 붙이기 (C++)  (0) 2021.03.08
#1107번 리모컨 (C++)  (0) 2021.03.04
#14500번 테트로미노 (C++)  (0) 2021.03.02
#14225번 부분수열의 합 (C++)  (0) 2021.02.24
#1182번 부분수열의 합 (C++)  (0) 2021.02.24