일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2019 카카오 공채
- 젠킨스
- 비트마스크
- 2018 카카오
- 2019 KAKAO BLIND RECRUITMENT
- 자바
- 카카오
- 2018 KAKAO BLIND RECRUITMENT 1차
- 알고리즘
- map
- bfs
- 2020 KAKAO BLIND RECRUITMENT
- 백준
- 2018 KAKAO BLIND RECRUITMENT
- c++
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 카카오 공채
- Baekjoon
- Java
- 2020 카카오 공채
- set
- gcp
- 프로그래머스
- dfs
- 부스트코스
- gradle
- 삼성 SW 역량테스트
- CS 스터디
- 2018 카카오 공채
- 삼성 SW 기출문제
Archives
- Today
- Total
아무코딩
[백준 17281] 야구 본문
문제풀이
시뮬레이션 문제이다. 순열을 만드는 방법은 next_permutation() 을 써도 되지만 여기서는 그냥 dfs를 이용하여 순열을 생성하였다.
순열을 생성하여 타순을 매번 정하여 해당 타순을 기준으로 점수를 산출한다.
출루는 베이스에 1을 추가한뒤 배열을 미는 방식으로 점수를 산출한다. 1루이동을 매루에 적용하여 재사용하였다.
소스코드
더보기
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int n_inning;
int Select[10];
int score[51][10];
int order[10];
vector<int> perm;
int base[5];
int total_score=0;
int max_score = -1;
void advance();
void Game();
void permutation(int cnt);
int main() {
//freopen("input.txt", "r", stdin);
scanf("%d", &n_inning);
for (int i = 1; i <=n_inning; i++) {
for (int j = 1; j <=9; j++) {
scanf("%d", &score[i][j]);
}
}
Select[4] = 1;
order[4] = 1;
permutation(2);
printf("%d\n", max_score);
}
void advance() {
for (int i = 3; i >= 0; i--) {
base[i + 1] = base[i];
}
if (base[4] == 1) {
base[4] = 0;
total_score++;
}
base[0] = 0;
}
void Game() {
int inning = 1;
int out_cnt = 0;
int play_order = 1;
memset(base, 0, sizeof(base));
while (1) {
//printf("%3d이닝 %3d 아웃 현재점수(%3d) %3d번타자 (등번호%3d):",inning,out_cnt,total_score, play_order, order[play_order], score[inning][order[play_order]]);
if (inning > n_inning) {
//종료조건
// printf("score : %d\n", total_score);
return;
}
int player_score = score[inning][order[play_order]];
if (player_score == 0) {
// printf("아웃\n");
out_cnt++;
}
else {
// printf("%d루타\n", score[inning][order[play_order]]);
base[0] = 1;//베이스에 사람한명세우기
for (int i = 0; i < player_score; i++) {
advance();//진루
}
//base[score[inning][order[play_order]]] = 1;
}
if (out_cnt == 3) {//삼진아웃.
out_cnt = 0;
inning++;
memset(base, 0, sizeof(base));
}
play_order = play_order % 9 + 1;//다음선수
}
}
void permutation(int cnt) {
if (cnt == 10) {
total_score = 0;
Game();
max_score = max(max_score, total_score);
return;
}
for (int i = 1; i < 10; i++) {
if (Select[i] == 1)
continue;
Select[i] = 1;
order[i] = cnt;
permutation(cnt + 1);
Select[i] = 0;
}
}
|
cs |
문제 링크 : www.acmicpc.net/problem/17281
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2623] 음악프로그램 (java) (0) | 2020.05.18 |
---|---|
[백준 2352] 반도체 설계 (0) | 2020.05.15 |
[백준 2580] 스도쿠 (0) | 2020.05.11 |
[백준 1300] k번째수 (0) | 2020.05.08 |
[백준 2252] 줄세우기 (0) | 2020.05.08 |
Comments