[C++ / 3085] 사탕 게임

2023. 7. 12. 16:20·Algorism(PS)/백준
728x90

문제

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net


문제 설명

봄보니 (Bomboni) 게임.

N x N 크기의 랜덤한 사탕으로 채워져있는 판이 있다.

사탕 색이 다른 인접두 칸을 고른 뒤, 두 칸의 사탕을 교환한다.

마지막으로, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다.

빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다.

 

(뭐, 대충 옛날 애니팡 같은 게임 규칙.)


풀이 방식

이 문제는 brute force 방식 즉, 모든 방법을 다 탐색해야 한다.

 

1. 우선 (i, j)와 (i, j+1)의 위치를 바꾼다.

2. 그 다음엔 모든 row에 대해서 조사를 한다.

만약 같은 문자가 연속으로 나타난다면, count의 값을 증가시키고 문자가 다르다면 count는 1로 유지한다.

3. 위와 같은 작업을 col에 대해서도 동일하게 진행한다.

4. (j, i)와 (j + 1, i)에 대해서도 동일한 2,3과 동일한 작업을 해야하므로 1에서 바꿔두었던 위치를 원래대로 돌린다.

5. (j, i)와 (j + 1, i)에 대해서 1~4와 동일한 작업을 한다.


솔루션

#include <iostream>
#include <algorithm>

using namespace std;

int maxCount = 0;

void searchRow(char map[51][51], int n)
{
  for (int i = 0; i < n; i++)
  {
    int count = 1;
    for (int j = 0; j < n; j++)
    {
      if (map[i][j] == map[i][j + 1])
      {
        count++;
      }
      else
      {
        if (count > maxCount)
        {
          maxCount = count;
        }
        count = 1;
      }
    }
  }
}

void searchCol(char map[51][51], int n)
{
  for (int i = 0; i < n; i++)
  {
    int count = 1;
    for (int j = 0; j < n; j++)
    {
      if (map[j][i] == map[j + 1][i])
      {
        count++;
      }
      else
      {
        if (count > maxCount)
        {
          maxCount = count;
        }
        count = 1;
      }
    }
  }
}

int main()
{
  int n;
  cin >> n;

  char map[51][51];

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      cin >> map[i][j];
    }
  }

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      swap(map[i][j], map[i][j + 1]);
      searchRow(map, n);
      searchCol(map, n);

      swap(map[i][j], map[i][j + 1]);
      // 원상태 복귀
      swap(map[j][i], map[j + 1][i]);
      searchRow(map, n);
      searchCol(map, n);

      swap(map[j][i], map[j + 1][i]);
    }
  }

  cout << maxCount << endl;
}

알게된 점

C++의 algorithm의 라이브러리에는 다음과 같은 알고리즘을 제공하고 있다. 자세한 내용은 아래를 참고

 

[C++ 표준] STL 알고리즘

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀 🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!

ansohxxn.github.io

저작자표시

'Algorism(PS) > 백준' 카테고리의 다른 글

[C++ / 2563] 색종이  (0) 2023.07.16
[C++ / 11053] 가장 긴 증가하는 부분 수열  (0) 2023.07.15
[C++ / 15666] N과 M (12)  (0) 2023.07.14
[C++ / 1181] 단어 정렬  (0) 2023.07.13
[C++ / 1874] 스택 수열  (0) 2023.07.11
'Algorism(PS)/백준' 카테고리의 다른 글
  • [C++ / 11053] 가장 긴 증가하는 부분 수열
  • [C++ / 15666] N과 M (12)
  • [C++ / 1181] 단어 정렬
  • [C++ / 1874] 스택 수열
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (203) N
      • Programming (14) N
        • HTML (0)
        • CSS (0)
        • Javascript (18)
        • SVG (1)
        • SASS (SCSS) (1)
        • Node.js (1)
        • MySQL (2)
        • Canvas (8)
        • React (14)
        • Typescript (6)
        • C (3)
        • Java (1)
      • 활동 (57)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
      • Algorism(PS) (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 취미 (5)
        • 강연 (5)
      • 생각 (16)
      • 기타 (8)
      • Reference (17)
        • 용어 사이트 (7)
        • 유용한 사이트 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    canvas
    HTML
    react
    개발자
    1주 1권
    CSS
    타입스크립트
    프로그래밍
    1주에 1권씩
    Javascript
    3기
    나눔 서포터즈
    디자인
    프론트엔드
    에리카
    백준
    Erica
    독후감
    SVG
    개념
    tutorial
    HTML5
    대학
    군대
    우테코
    프로젝트
    한양대학교
    알고리즘
    ES6
    TypeScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
[C++ / 3085] 사탕 게임
상단으로

티스토리툴바