일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 KAKAO BLIND RECRUITMENT
- 삼성 SW 역량테스트
- 알고리즘
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 자바
- 비트마스크
- 2018 카카오 공채
- 삼성 SW 기출문제
- 부스트코스
- set
- 2020 카카오 공채
- gcp
- Baekjoon
- 카카오
- 카카오 공채
- CS 스터디
- 2018 KAKAO BLIND RECRUITMENT
- gradle
- c++
- bfs
- Java
- map
- 2018 카카오
- 프로그래머스
- 2019 카카오 공채
- 젠킨스
- dfs
- 2020 KAKAO BLIND RECRUITMENT
- 백준
- 2018 KAKAO BLIND RECRUITMENT 1차
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