알고리즘/BOJ

백준 17281번 야구공

꾸준함. 2020. 6. 4. 21:34

문제 링크입니다: https://www.acmicpc.net/problem/17281

 

17281번: ⚾

⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종�

www.acmicpc.net

가장 많은 득점을 하는 타순을 찾기 위해 1번 선수부터 9번 선수까지의 모든 순열에 대해 시뮬레이션을 돌려야하는 문제였습니다.

문제 조건으로 1번 선수가 4번 타자가 되어야 하기 때문에 순열의 네 번째 인덱스가 0인지 확인한 뒤 시뮬레이션을 돌렸습니다. (v[0] == 3)

타순은 이닝이 변경되어도 순서를 유지해야하기 때문에 덱을 사용하여 현재 타석에 선 타자를 push_back 메서드를 통해 맨 뒤로 보냈습니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
using namespace std;
const int BASE_MAX = 3;
const int PLAYER_MAX = 9;
const int MAX = 50;
int N;
int temp, result;
int innings[MAX][PLAYER_MAX];
vector<int> v;
deque<int> dq;
void func(int inning)
{
int out = 0;
int bases[BASE_MAX] = { 0, };
for (; out != 3;)
{
int cur = dq.front();
dq.pop_front();
dq.push_back(cur);
int player = innings[inning][cur];
switch (player)
{
case 0:
out++;
break;
case 1:
if (bases[2])
{
temp++;
bases[2] = 0;
}
for (int i = 1; i >= 0; i--)
{
bases[i + 1] = bases[i];
bases[i] = 0;
}
bases[0] = 1;
break;
case 2:
for (int i = 2; i >= 1; i--)
{
if (bases[i])
{
temp++;
}
bases[i] = 0;
}
if (bases[0])
{
bases[2] = 1;
bases[0] = 0;
}
bases[1] = 1;
break;
default:
for (int i = 2; i >= 0; i--)
{
if (bases[i])
{
temp++;
}
bases[i] = 0;
}
if (player == 3)
{
bases[2] = 1;
}
else
{
temp++;
}
break;
}
}
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < PLAYER_MAX; j++)
{
cin >> innings[i][j];
}
}
v.resize(PLAYER_MAX);
for (int i = 0; i < PLAYER_MAX; i++)
{
v[i] = i;
}
do
{
dq.clear();
if (v[3] == 0)
{
for (int i = 0; i < PLAYER_MAX; i++)
{
dq.push_back(v[i]);
}
temp = 0;
for (int i = 0; i < N; i++)
{
func(i);
}
result = max(result, temp);
}
} while (next_permutation(v.begin(), v.end()));
cout << result << "\n";
return 0;
}
view raw .cpp hosted with ❤ by GitHub

개발환경:Visual Studio 2019

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 19235번 모노미노도미노  (0) 2020.06.12
백준 2517번 달리기  (0) 2020.06.08
백준 16964번 DFS 스페셜 저지  (0) 2020.06.04
백준 1941번 소문난 칠공주  (0) 2020.06.04
백준 2665번 미로만들기  (0) 2020.06.03