반응형
포인트
1. 잘 구현을 할 수 있는가?
2. 코딩 전에 설계를 할 줄 알아야 한다
🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다.
#include <iostream>
#include <vector>
using namespace std;
int n, answer;
int order[10]; // 타순
int map[51][10];
bool visited[10];
void game() {
int score = 0;
int player = 1;
int base[4]; // base 상태
for (int i = 1; i <= n; i++) // 총 N이닝 동안 진행
{
int cnt = 0;
bool nextIning = false;
for (int i = 0; i < 4; i++) base[i] = 0; // 베이스를 비운다.
while (1) { // 게임
for (int j = player; j < 10; j++) {
int xplayer = map[i][order[j]]; // 순서가 정해진 대로 선수들이 타석으로 출전.
if (xplayer == 0) cnt += 1; // 아웃을 치게되면 cnt 증가
else if (xplayer == 1) // 안타를 치게되면
{
for (int k = 3; k >= 1; k--) // 각 루에 있던 선수들이 한 칸씩 전진하게 된다.
{
if (base[k] == 1) {
if (k == 3) // 3루에 선수가 있었다면
{
base[k] = 0; // 홈으로 들어가게되고
score += 1; // 점수가 1점 ++
} else {
base[k + 1] = 1; // 3루가 아닌 선수들은 1루씩 전진
base[k] = 0;
}
}
}
base[1] = 1;
} else if (xplayer == 2) // 2루타도 마찬가지 원리 !
{
for (int F = 3; F >= 1; F--) {
if (base[F] == 1) {
if (F == 3 || F == 2) {
base[F] = 0;
score += 1;
} else {
base[F + 2] = 1;
base[F] = 0;
}
}
}
base[2] = 1;
} else if (xplayer == 3) // 3루타도 마찬가지 원리 !
{
for (int S = 3; S >= 1; S--) {
if (base[S] == 1) {
base[S] = 0;
score += 1;
}
}
base[3] = 1;
} else // 홈런일 경우
{
for (int F = 1; F <= 3; F++) {
if (base[F] == 1) {
base[F] = 0;
score += 1; // 어떤 루에 있던 간에 무조건 홈으로 들어갈 수
// 있으므로 점수++
}
}
score += 1;
}
if (cnt == 3) // 3Out이 되면 그 다음 이닝으로 넘어간다.
{
player = j + 1; // 다음 플레이어
if (player == 10) player = 1; //다시 돌아오기
nextIning = true; //다음 이닝으로 넘어간다.
break;
}
}
if (nextIning) break; // 이닝 종료
else player = 1;
}
}
answer = max(answer, score);
}
void go(int cnt) { // 2번 선수 부터 차례대로 구해준다.
if (cnt == 10) { // 10명 되면 게임 시작
game();
return;
}
for (int i = 1; i < 10; i++) {
if (visited[i] == true) continue;
visited[i] = true;
order[i] = cnt;
go(cnt + 1);
visited[i] = false;
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j < 10; j++)
cin >> map[i][j];
visited[4] = true;
order[4] = 1;
go(2);
cout << answer << "\n";
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] c++ cpp 홈 방범 서비스 (0) | 2020.10.08 |
---|---|
[알고리즘] c++ cpp 상어 시리즈(아기상어2) (0) | 2020.10.07 |
[알고리즘] c++ cpp 파이프시리즈 (파이프옮기기1) (0) | 2020.10.07 |
[알고리즘] c++ cpp 보급로 (0) | 2020.10.07 |
[알고리즘] c++ cpp 포도주 시식 (0) | 2020.10.06 |
댓글