백준 20414 MVP 다이아몬드 (Normal) C++
- C
- 2023. 4. 14.
백준 20414 MVP 다이아몬드 (Normal).
백준 20414번 "MVP 다이아몬드 (Normal)" 문제의 자세한 내용은 글 하단의 문제 링크를 참고하세요.
21414번 문제에 주어지는 입력 및 예시
입력:
8
30 60 90 150
BSDDPGSG
출력:
506
코드
백준 21414번 "MVP 다이아몬드 (Normal)" 문제의 코드입니다.
1. code.
#include<bits/stdc++.h>
using namespace std;
int n,B,S,G,P,D,result;
int main(){
string s;
map<char,vector<int>> m;
cin>>n>>S>>G>>P>>D>>s;
m['B']={0,S-1};
m['S']={S,G-1};
m['G']={G,P-1};
m['P']={P,D-1};
m['D']={D,D*10};
vector<int> calendar(n);
//첫째달.
if(s[0]=='D') calendar[0]=D;
else calendar[0]=m[s[0]][1];
//그 이후.
for(int i=1;i<n;i++){
char MVP=s[i];
if(MVP=='D'){calendar[i]=D;continue;}//다이아인경우.
if(calendar[i-1]<m[MVP][1])//두 달의 합이 문제 없는경우.
calendar[i]=m[MVP][1]-calendar[i-1];
else if(calendar[i-1] > m[MVP][1]){//문제가 생긴경우.
calendar[i]=0;
calendar[i-1]=m[MVP][1];
for(int j=i-1;j>0;j--){
char MVP2=s[j];
//두 달의 합이 MVP 과금 최소 기준보다 낮은경우.
if(calendar[j]+calendar[j-1]<m[MVP2][0])
calendar[j-1]=m[MVP2][0]-calendar[j];
//두 달의 합이 MVP과금 최대 기준보다 높은경우.
else if(calendar[j]+calendar[j-1]>m[MVP2][1])
calendar[j-1]=m[MVP2][1]-calendar[j];
else break; //이후로는 문제 없음.
}
}
}
for(auto v:calendar) result+=v;
cout<<result;
}
2. code
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int n,t[5];
map<char,int> conv;
string s;
cin >> n >> t[0] >> t[1] >> t[2] >> t[3] >> s;
t[4] = t[3] + 1;
for (int i = 0; i < 5; i++)
conv["BSGPD"[i]] = i;
vector<int> calendar(n);
for (int i = 0; i < n; i++)
calendar[i] = t[conv[s[i]]] - 1;
int previ = calendar[0], result = calendar[0];
for (int i = 1; i < n; i++)
{
bool v = calendar[i] < previ;
previ = (s[i] == 'D') ? calendar[i] : calendar[i] - previ;
result += previ;
if (v) previ = 0;
}
cout << result;
return 0;
}
실행
위의 코드를 예제의 입력을 넣어 실행했을 때의 결과입니다.
'C' 카테고리의 다른 글
백준 10709 기상캐스터 C++ (0) | 2023.04.14 |
---|---|
백준 3474 교수가 된 현우 C++ (0) | 2023.04.14 |
백준 20413 MVP 다이아몬드 (Easy) C++ (1) | 2023.04.13 |
백준 4659 비밀번호 발음하기 C++ (0) | 2023.04.12 |
백준 2910 빈도 정렬 C++ (0) | 2023.04.12 |