알고리즘
[C++] 백준 2037번 문자메시지
J3SUNG
2019. 11. 5. 15:49
728x90
문자를 전부 누르는데 걸리는 시간을 구하는 문제입니다.
각 문자에 대한 시간과 집합을 설정해주고
시간을 계산해서 더해주고,
집합이 같으면 w만큼 추가해주면 됩니다.
특징으로는 공백은 연속으로 입력되도 w를 추가해주지 않아도 됩니다.
#include <iostream>
#include <algorithm>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int p, w;
int now = 0;
int result = 0;
int num[2][27] = { { 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4 },
{ 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9 } };
string s;
scanf("%d%d", &p, &w);
getchar();
getline(cin, s);
for (int i = 0; i < s.length(); ++i) {
int index = -1;
if (s[i] >= 'A' && s[i] <= 'Z') {
index = s[i] - 'A' + 1;
}
if (s[i] == ' ') {
index = 0;
}
if (index != -1) {
result += num[0][index] * p;
if (now == num[1][index] && index != 0) {
result += w;
}
now = num[1][index];
}
}
cout << result << endl;
return 0;
}