일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Hortonworks Sandbox
- leetcode 15
- leetcode 49
- 컴퓨터구조
- airflow docker
- 배열
- Python
- 빅데이터를 지탱하는 기술
- 올바른 변수명 짓기
- leetcode 5
- docker로 airflow 설치하기
- leetcode 121
- leetcode 561
- leetcode 234
- leetcode 238
- ctf-d
- leetcode
- 데이터레이크와 데이터웨어하우스
- leetcode 344
- leetcode125
- leetcode 937
- wargame.kr
- 머신러닝
- webcrawler
- Hadoop
- 스파크 완벽 가이드
- 블로그 이전했어요
- MapReduce 실습
- leetcode 819
- 문자열 조작
Archives
- Today
- Total
HyeM
[백준 3085]사탕게임_C++ 본문
브루트포스 유형
★문제 설명 :
인접한 두 칸의 사탕을 바꾼 후, 보드(배열)에서 같은것이 최대로 연속된 것을 구한다.
★ 풀이 :
생각해야 될 것이 2가지 였다.
하나는 바꾸기, 두번째는 연속된 거 카운트 하기 이다
- 바꾸기 : 좌우로 바꾸는 경우와 위아래 바꾸기로 2가지 있음 --> 구현 : main() 안에
- 연속된 거 카운트 : 행에서 연속된 것과 열로 연속된 거 2가지 있음 --> 구현 : Count() 함수
c++ 코드
#include<iostream>
using namespace std;
int n = 0;
char arr[51][51] = { 0, };
int dap = 0; //최종 리턴값
void Count();
int main() {
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cin >> arr[i][j];
}
//cout << Count();
char tmp; //자리 swap 할때
//1. 행(가로)에서만 바꾸기
for (int i = 0; i < n; i++) {
for (int j = 0; j<n-1; j++) {
//arr[i][j]와 arr[i][j+1]를 swap
tmp = arr[i][j];
arr[i][j] = arr[i][j + 1];
arr[i][j + 1] = tmp;
Count();
//원위치 시켜줌.
tmp = arr[i][j];
arr[i][j] = arr[i][j + 1];
arr[i][j + 1] = tmp;
}
}
//2. 열(세로)에서만 바꾸기
for (int j = 0; j< n; j++) {
for (int i = 0; i < n - 1; i++) {
//arr[i][j]와 arr[i][j+1]를 swap
tmp = arr[i][j];
arr[i][j] = arr[i+1][j];
arr[i+1][j] = tmp;
Count();
//원위치 시켜줌.
tmp = arr[i][j];
arr[i][j] = arr[i + 1][j];
arr[i + 1][j] = tmp;
}
}
cout << dap;
}
void Count() { //함수 : 해당 배열에서 인접한 칸 최대 개수 카운트
char prev;
int count = 0; //카운트
// 1. 한 행(가로)에서 같은거 count
for (int i = 0; i < n; i++) {
prev = arr[i][0];
count = 1;
for (int j = 1; j < n; j++)
{
if (arr[i][j] == prev) {
count += 1;
}
else {
count = 1;
}
prev = arr[i][j];
if (dap < count)
dap = count;
}
}
// 2. 한 열(세로)에서 같은 거 count
for (int j = 0; j < n; j++) {
prev = arr[0][j];
count = 1;
for (int i = 1; i < n; i++) {
if (arr[i][j] == prev) {
count += 1;
}
else {
count = 1;
}
prev = arr[i][j];
if (dap < count)
dap = count;
}
}
}
'Programming > Algorithm' 카테고리의 다른 글
[백준2847]게임을 만든 동준이_C++ (0) | 2020.11.12 |
---|---|
[백준2828]사과담기게임_C++ (0) | 2020.11.10 |
[백준 1439]뒤집기_C++ (0) | 2020.11.10 |
[백준 2798]블랙잭_C++ (0) | 2020.11.10 |
Comments