<링크>
https://www.acmicpc.net/problem/2621
<소스코드>
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 | #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { int ans = 0; vector<pair<int,char>> card; int cnt[10] = { 0, }; string buf; int maxNum = 0; for (int i = 0; i < 5; ++i) { getline(cin, buf); char c = buf[0]; int n = buf[2] - '0'; card.push_back({ n,c}); //숫자, 색깔 maxNum = max(maxNum,n); cnt[n]++; } int colorCheck = 1; int seqCheck = 1; sort(card.begin(), card.end()); char c = card[0].second; for (int i = 1; i < 5; ++i) { if (c != card[i].second) colorCheck = 0; if (card[i].first != card[i - 1].first + 1) seqCheck = 0; } if (colorCheck) ans = max(ans, 600 + maxNum); if (seqCheck) ans = max(ans, 500 + maxNum); if (colorCheck && seqCheck) ans = max(ans, 900 + maxNum); vector<pair<int, int>> v; for (int i = 1; i <= 9; ++i) if (cnt[i]) v.push_back({cnt[i],i }); sort(v.begin(), v.end(),greater<pair<int,int>>()); if (v[0].first >= 4) ans = max(ans,v[0].second + 800); else if (v[0].first == 3) { if (v[1].first == 2) ans = max(ans,v[0].second * 10 + v[1].second + 700); else ans = max(ans,v[0].second + 400); } else if (v[0].first == 2) { if (v[1].first == 2) { int m = max(v[0].second, v[1].second); int n = min(v[0].second, v[1].second); ans = max(ans,m * 10 + n + 300); } else ans = max(ans,v[0].second + 200); } else ans = max(ans,maxNum + 100); printf("%d", ans); } | cs |
<풀이>
걍 조건문 잘 만드는 문제인데 낚시가 있을것같았다.
예를들어 R5, Y5, G7, B5, Y7 일때,
같은숫자가 3개&2개인데 2개&2개도 적용이 된다.
상식상 카드게임할때 3&2가 2&2보다 더 운좋은거니까 높은점수를 먹을것같았는데
2개&2개로 계산하는게 10을 곱하고 어쩌고가 있어서 더 클수도있을것같았다.
그래서 규칙들을 적용했을 때 나올수 있는 점수 범위를 보니까
하위규칙에서 아무리 잘나와봤자 상위규칙의 제일 못한놈을 이길수는 없다.
그래서 규칙적용 순서만 잘 적용시키면 최대점수를 알수있게 된다.
'알고리즘 풀이 > 기타' 카테고리의 다른 글
백준 1991 트리 순회 (0) | 2018.08.31 |
---|---|
백준 8979 올림픽 (0) | 2018.08.29 |
백준 13414 수강신청 (0) | 2018.08.02 |
백준 13413 오셀로 재배치 (0) | 2018.08.01 |
백준 10973 이전 순열 (0) | 2018.07.24 |