어읽로꾸거
BOJ 17281 ⚾(삼성 A형 기출) 본문
백준 17281 ⚾(야구)
https://www.acmicpc.net/problem/17281
요즘 삼성 A형 기출을 풀어보고 있다.
코로나 끝나면 외출 끊어서 삼성 코테 보러 갈꺼임.
문제 이름이 그림이다. 특이함.
풀이
가능한 선수 타자 배치를 만든다. p_list 배열에다가 만듦. 여기서 1번 선수는 무조건 4번 타자이다.
아마 처음은 2 3 4 1 5 6 7 8 9 일꺼고 이런식으로 재귀를 통하여 모든 경우의 수를 구현한다.
그 후 각 경우에 대하여 야구 경기를 시뮬레이션 한다. 그리고 최대값 갱신 끝.
경기 시뮬 부분을 좀 더 잘 짤 수 있었을것 같은데 생각이 안난다. 하드코딩 한 것 같은데 아닌 것 같기도 하고.
삼성 A형은 풀다 보면 유형이 어느정도 정해진 것 같다. DP처럼 기록하기거나, 각 경우에 대해 생각하고 구현하기 등등
색종이 문제도 이 유형과 비슷한 것 같다.
https://www.acmicpc.net/problem/17136
코드
#include<bits/stdc++.h>
using namespace std;
int N;
int player[52][10];
int p_list[10];
bool isin[10];
int ans;
int gethit(int inning, int num){
return player[inning][p_list[num]];
}
void simulate(){
int score = 0;
int p_num = 1;
for(int i=1;i<=N;i++){
bool base[4]={0,0,0,0};
int out = 0;
while(out<3){
if(p_num==10) p_num=1;
if(gethit(i, p_num) == 0){
out++;
}
else if(gethit(i, p_num) == 1){
if(base[3]){
base[3]=0; score++;
}
if(base[2]){
base[3]=1; base[2]=0;
}
if(base[1]){
base[2]=1; base[1]=0;
}
base[1]=1;
}
else if(gethit(i, p_num) == 2){
if(base[3]){
base[3]=0; score++;
}
if(base[2]){
base[2]=0; score++;
}
if(base[1]){
base[3]=1; base[1]=0;
}
base[2]=1;
}
else if(gethit(i, p_num) == 3){
if(base[3]){
base[3]=0; score++;
}
if(base[2]){
base[2]=0; score++;
}
if(base[1]){
base[1]=0; score++;
}
base[3]=1;
}
else if(gethit(i, p_num) == 4){
if(base[3]){
base[3]=0; score++;
}
if(base[2]){
base[2]=0; score++;
}
if(base[1]){
base[1]=0; score++;
}
score++;
}
p_num++;
}
}
//cout<<score<<'\n';
ans = max(ans, score);
}
void dfs(int idx, int n){
if(idx==4){
dfs(idx+1,n);
return;
}
p_list[idx]=n;
isin[n]=1;
if(idx == 9){
simulate();
}
else{
for(int i=2;i<10;i++){
if(!isin[i]){
dfs(idx+1,i);
}
}
}
isin[n]=0;
}
void solve(){
for(int i=2;i<10;i++){
dfs(1,i);
}
}
int main(){
//1번부터 9번까지 총 9명
ans = 0;
cin>>N;
for(int i=1;i<=N;i++){
for(int j=1;j<=9;j++){
cin>>player[i][j];
}
}
p_list[4]=1; isin[1]=1;
solve();
cout<<ans;
}
'알고리즘' 카테고리의 다른 글
BOJ 15647 로스팅하는 엠마도 바리스타입니다 (0) | 2019.09.19 |
---|---|
BOJ 3187 양치기 꿍 (0) | 2019.09.15 |
BOJ 14613 너의 티어는? (0) | 2019.09.15 |
BOJ 1038 감소하는 수 (0) | 2019.09.15 |
BOJ 17141 연구소 2 (0) | 2019.09.13 |