게으른카르

백준 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

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band