# 문제링크
DFS로 타자들의 순서를 정하고, 시뮬레이션을 돌려주었습니다. 그냥 뭐 생각할 것도 없고, if 문 여러 개 해서 조건만 맞추어서 돌려주었습니다. 시뮬레이션 문제는 진짜 문제 꼼꼼하게 읽고 그대로! 코드로 구현하는 게 중요한 거 같아요..
# 제출 코드
#include <cstdio>
using namespace std;
int N;
int order[10];
int map[51][10];
bool chk[10];
int ans = 0;
/*
안타: 1
2루타: 2
3루타: 3
홈런: 4
아웃: 0
*/
void Input() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
for (int j = 1; j <= 9; j++) { // 1번부터 9번
scanf("%d", &map[i][j]);
}
}
}
int Get_num() {
int num = 0; // 이닝 번호
int i = 1; // 현재 순서
int cur = order[1]; // 현재 선수
int score = 0; // 점수
int out = 0;
int ru[4] = { 0, };
while (num < N) {
if (map[num][cur] == 0) out++; // 아웃
else if (map[num][cur] == 1) { // 안타
if (ru[3] == 1) { score++; ru[3] = 0; }
if (ru[2] == 1) { ru[3] = 1; ru[2] = 0; }
if (ru[1] == 1) ru[2] = 1;
ru[1] = 1;
}
else if (map[num][cur] == 2) { // 2루타
if (ru[3] == 1) { score++; ru[3] = 0; }
if (ru[2] == 1) { score++; ru[2] = 0; }
if (ru[1] == 1) { ru[3] = 1; ru[1] = 0; }
ru[2] = 1;
}
else if (map[num][cur] == 3) { //3루타
if (ru[3] == 1) { score++; ru[3] = 0; }
if (ru[2] == 1) { score++; ru[2] = 0; }
if (ru[1] == 1) { score++;; ru[1] = 0; }
ru[3] = 1;
}
else { //홈런
if (ru[3] == 1) { score++; ru[3] = 0; }
if (ru[2] == 1) { score++; ru[2] = 0; }
if (ru[1] == 1) { score++;; ru[1] = 0; }
score++; // 타자도 득점~!
}
if (out == 3) { // 이닝 변경
num++; out = 0;
ru[1] = ru[2] = ru[3] = 0;
}
i = (i == 9) ? 1 : i+1; // 다음 타자 등판~!
cur = order[i];
}
return score;
}
void DFS(int node) {
if (node == 10) {
int ret = Get_num();
if (ret > ans) ans = ret;
return;
}
for (int i = 2; i < 10; i++) {
if (chk[i] == true)continue;
chk[i] = true;
order[node] = i;
if (node == 3) DFS(node + 2);
else DFS(node + 1);
chk[i] = false;
order[node] = 0;
}
}
int main() {
//freopen("sample_input.txt", "r", stdin);
Input();
order[4] = 1; // 4번 타자는 1로 정해짐
DFS(1);
printf("%d\n", ans);
}
채점 시간이 너무 오래걸려서 긴장되었던..ㅎㅎ
반응형
'Computer Science&Engineering > 코딩테스트' 카테고리의 다른 글
[ 백준 19238 ] 스타트 택시 (0) | 2021.04.22 |
---|---|
[ 백준 9207 ] 페그 솔리테어 (C++) (0) | 2021.04.21 |
[백준 9205] 맥주 마시면서 걸어가기 (C++) DFS, BFS 풀이 (0) | 2021.04.19 |
[백준 11967] 불켜기 (C++) BFS풀이 (0) | 2021.04.19 |
[ 백준 15685 ] 드레곤 커브 (0) | 2021.04.19 |