[백준/BOJ] 백준 2037번 : 문자메시지

2023. 10. 13. 15:18알고리즘 문제풀이

https://www.acmicpc.net/problem/2037

 

2037번: 문자메시지

첫째 줄에 p와 w가 주어진다. (1 ≤ p, w ≤ 1,000) p는 버튼을 한번 누르는데 걸리는 시간이고, w는 AC와 같은, 같은 숫자인 문자를 연속으로 찍기 위해 기다리는 시간을 의미한다. 그리고 둘째 줄에는

www.acmicpc.net

 

각 알파벳이 어떤 숫자의 몇 번째에 속하는지 저장해 놓고, 이를 이용해 문자열의 각 문자를 확인해서 문제를 해결했다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
using namespace std;

int p, w;
string input;
map<char, pair<int, int>> number; //각 알파벳이 어떤 숫자의 몇번째에 속하는지 저장

void init() {

	number.insert(make_pair(' ', make_pair(1, 1)));

	number.insert(make_pair('A', make_pair(2, 1)));
	number.insert(make_pair('B', make_pair(2, 2)));
	number.insert(make_pair('C', make_pair(2, 3)));

	number.insert(make_pair('D', make_pair(3, 1)));
	number.insert(make_pair('E', make_pair(3, 2)));
	number.insert(make_pair('F', make_pair(3, 3)));

	number.insert(make_pair('G', make_pair(4, 1)));
	number.insert(make_pair('H', make_pair(4, 2)));
	number.insert(make_pair('I', make_pair(4, 3)));

	number.insert(make_pair('J', make_pair(5, 1)));
	number.insert(make_pair('K', make_pair(5, 2)));
	number.insert(make_pair('L', make_pair(5, 3)));

	number.insert(make_pair('M', make_pair(6, 1)));
	number.insert(make_pair('N', make_pair(6, 2)));
	number.insert(make_pair('O', make_pair(6, 3)));

	number.insert(make_pair('P', make_pair(7, 1)));
	number.insert(make_pair('Q', make_pair(7, 2)));
	number.insert(make_pair('R', make_pair(7, 3)));
	number.insert(make_pair('S', make_pair(7, 4)));

	number.insert(make_pair('T', make_pair(8, 1)));
	number.insert(make_pair('U', make_pair(8, 2)));
	number.insert(make_pair('V', make_pair(8, 3)));

	number.insert(make_pair('W', make_pair(9, 1)));
	number.insert(make_pair('X', make_pair(9, 2)));
	number.insert(make_pair('Y', make_pair(9, 3)));
	number.insert(make_pair('Z', make_pair(9, 4)));

}

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	init();

	cin >> p >> w;

	cin.ignore();
	getline(cin, input);

	int result = 0;

	for (int i = 0; i < input.size(); i++) {

		result += (number[input[i]].second * p); //버튼을 누르는 시간 추가

		if (i >= 1) {
			if (input[i] != ' ' && number[input[i - 1]].first == number[input[i]].first) { //공백이 아니고, 같은 숫자에 속한 문자가 연속으로 있을때
				result += w; //기다리는 시간 추가
			}
		}
	}

	cout << result;

	return 0;
}