๋ฌธ์
17281๋ฒ: โพ
โพ๋ 9๋ช ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ ํ์ด ๊ณต๊ฒฉ๊ณผ ์๋น๋ฅผ ๋ฒ๊ฐ์ ํ๋ ๊ฒ์์ด๋ค. ํ๋์ ์ด๋์ ๊ณต๊ฒฉ๊ณผ ์๋น๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ด N์ด๋ ๋์ ๊ฒ์์ ์งํํด์ผ ํ๋ค. ํ ์ด๋์ 3์์์ด ๋ฐ์ํ๋ฉด ์ด๋์ด ์ข
www.acmicpc.net
ํ์ด
ruhz3/CodingTest
To prepare for coding test. Contribute to ruhz3/CodingTest development by creating an account on GitHub.
github.com
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
int N;
int hitTable[50][9];
int entry[9];
vector<int> field;
int findMaxScore() {
int outCount;
int entryIdx = 0;
int score = 0;
for (int inning = 0; inning < N; inning++) {
// ์ด๋์ด ์์๋๋ฉด, outCount์ ํ๋ ์ด๊ธฐํ
outCount = 0;
field.clear();
while (outCount < 3) {
int hitScore = hitTable[inning][entry[entryIdx]];
// ํ์ฌ ์ ์ ์์์ ์น ๊ฒฝ์ฐ
if (hitScore == 0) {
outCount++;
}
// ํ์ฌ ์ ์ ์ํ๋ฅผ ์น ๊ฒฝ์ฐ
else {
// ์ ์ ํ ๋ช
์ ๋ฃ์ด์ฃผ๊ณ , ํ๋ ์์ ๋ชจ๋ ์ ์ ์ง๋ฃจ
field.push_back(0);
for (int i = 0; i < field.size(); i++) {
field[i] += hitScore;
}
// ํ๋ ์์ 4์ด์์ธ ์ ์ ๋นผ์ฃผ๋ฉด์ ์ ์++
while(!field.empty() && field[0] >= 4) {
field.erase(field.begin());
score++;
}
}
// ๋ค์ ์ ์ ์
์ฅ
if (entryIdx == 8) entryIdx = 0;
else entryIdx++;
}
}
return score;
}
int makeEntry(int entryNum){
// entry๊ฐ ์์ฑ๋๋ฉด findMaxScore() ํธ์ถ
if (entryNum == 9) {
return findMaxScore();
}
// 3๋ฒํ์๋ 0๋ฒ์ ์ ๊ณ ์
if (entryNum == 3) {
entry[3] = 0;
return makeEntry(entryNum + 1);
}
int res = 0;
bool flag;
for (int i = 1; i < 9; i++) {
// 0๋ฒ ์ ์ ์ ์ธ, ์ด์ entry์ ๋ฃ์ผ๋ ค๋ ์ ์๊ฐ ์๋์ง ๊ฒ์ฌํด flag ์ ์ฅ
flag = true;
for (int j = 0; j < entryNum; j++) {
if (i == entry[j])
flag = false;
}
// ์๋ค๋ฉด ์ ์๋ฅผ ํด๋น entry์ ๋ฃ๊ณ ๋ค์ entry ์์ฑ
if (flag) {
entry[entryNum] = i;
res = max(res, makeEntry(entryNum + 1));
}
}
return res;
}
int main() {
memset(entry, -1, sizeof(entry));
cin >> N;
for (int inning = 0; inning < N; inning++)
for (int player = 0; player < 9; player++)
cin >> hitTable[inning][player];
cout << makeEntry(0) << endl;
return 0;
}
์ด์ฐจํผ ๊ฒ์์ ๋ฃฐ์ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ท์น์ ๋ง๊ฒ ๊ฒ์์ ํ๋ ์ด ํ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ , ์ ์์ ์ํธ๋ฆฌ๋ฅผ ์ฌ๊ท๋ก ์์ ํ์ํด์ ๊ตฌํํ๊ณ ์ ํ๋ค. ์ฌ์ํ ๋ถ๋ถ์์ ๋งํ ์๊ฐ์ ์ค๋ ์ผ์ง๋ง, ๋ฌธ์ ๊ฐ ์ ๋นํ ๋์ด๋์ฌ์ ์ฌ๋ฏธ์๊ฒ ํ์๋ ๊ฒ ๊ฐ๋ค.
<makeEntry ํจ์>
- ์ ์์ entry๋ฅผ ์ฌ๊ท๋ก ์์ ํ์ํ๋ค.
- entry๋ฅผ ๋ชจ๋ ๊ตฌ์ฑํ๊ณ ๋๋ฉด, findMaxScoreํจ์๋ฅผ ํธ์ถํ์ฌ returnํ๋ค.
- ๋ฐฑํธ๋ํนํ๋ฉฐ, ํธ์ถํ ์ฌ๊ทํจ์์ return๊ฐ๋ค์ ๋น๊ตํ๊ณ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ๋๋ค.โ
<findMaxScore ํจ์>
- ๊ฐ ์ด๋ ๋ณ๋ก while ๋ฐ๋ณต๋ฌธ ์์ ๋ค์ด๊ฐ๊ณ , outCount๊ฐ 3์ด์ ๋์ด๋๋ฉด ๋น ์ ธ๋์จ๋ค.
- ํ๋๋ ๋ฒกํฐ๋ก ๊ตฌ์ฑํ๊ณ , ์ด๋์ด ๋๋๋ ๋ค์ ํ์์ ์ค๋ฅผ ์ ์ ์ ๋ณด๊ฐ ๋ณด์กด๋๊ฒ ๊ตฌํํ๋ค.
Out์ด๋ผ๋ฉด :
- outCount 1์ฆ๊ฐ ๋ฐ ๋ค์ ์ ์๋ก ๋๊น
Out์ด ์๋๋ผ๋ฉด :
- ์ผ๋จ ์ ์๋ฅผ 0๋ฃจ(ํ)์ ๋ฃ๊ณ , n๋ฃจํ๋ผ๋ฉด ๋ฒกํฐ(ํ๋)์ ์๋ ๋ชจ๋ ์์๋ค์ n์ ๋ํ๋ค(์ง๋ฃจ).
- 4์ด์์ธ ๊ฒฝ์ฐ ๋ฒกํฐ(ํ๋)์์ ๋นผ์ฃผ๊ณ score++
- ๋ค์ ์ ์๋ก ๋๊น
'๐ > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ํฌ๋ก์ํฐ์ ์ํ๋ฒณ (๋ฐฑ์ค, 2941) (0) | 2021.03.03 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฑ (๋ฐฑ์ค, 3190) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] 2048(Easy) (๋ฐฑ์ค, 12100) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] ์ฐ๊ตฌ์ (๋ฐฑ์ค, 14502) (0) | 2020.11.20 |
[์๊ณ ๋ฆฌ์ฆ] ์ ์ ์ผ๊ฐํ (๋ฐฑ์ค, 1932) (0) | 2020.11.20 |