728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄에 p와 w가 주어진다. (1<=p,w<=1,000) p는 버튼을 한번 누르는데 걸리는 시간이고, w는 AC와 같은, 같은 숫자인 문자를 연속으로 찍기 위해 기다리는 시간을 의미한다. 그리고 둘째 줄에는 적을 문자열이 주어진다. 단, 이 문자열의 길이는 1000보다 작고, 맨 앞에 공백이 들어오는 경우는 없다고 가정하여도 좋다. 문자열은 알파벳 대문자와 띄어쓰기만으로 이루어져 있다.
출력
첫째 줄에 메시지를 적는데 걸리는 시간을 출력한다.
소스코드
#include <iostream> #include <string> using namespace std; int main(void) { int p, w; int len, prev = -1, sum = 0; string message; cin >> p >> w; cin.ignore(); getline(cin, message); len = message.length(); for (int i = 0; i < len; i++) { if (message[i] == ' ') { sum += p; prev = 1; } else if (message[i] >= 'A' && message[i] <= 'C') { sum += (prev == 2) ? w + (message[i] - 'A' + 1)*p : (message[i] - 'A' + 1) * p; prev = 2; } else if (message[i] >= 'D' && message[i] <= 'F') { sum += (prev == 3) ? w + (message[i] - 'D' + 1)*p : (message[i] - 'D' + 1)*p; prev = 3; } else if (message[i] >= 'G' && message[i] <= 'I') { sum += (prev == 4) ? w + (message[i] - 'G' + 1)*p : (message[i] - 'G' + 1) * p; prev = 4; } else if (message[i] >= 'J' && message[i] <= 'L') { sum += (prev == 5) ? w + (message[i] - 'J' + 1)*p : (message[i] - 'J' + 1)*p; prev = 5; } else if (message[i] >= 'M' && message[i] <= 'O') { sum += (prev == 6) ? w + (message[i] - 'M' + 1)*p : (message[i] - 'M' + 1)*p; prev = 6; } else if (message[i] >= 'P' && message[i] <= 'S') { sum += (prev == 7) ? w + (message[i] - 'P' + 1)*p : (message[i] - 'P' + 1)*p; prev = 7; } else if (message[i] >= 'T' && message[i] <= 'V') { sum += (prev == 8) ? w + (message[i] - 'T' + 1)*p : (message[i] - 'T' + 1)*p; prev = 8; } else { sum += (prev == 9) ? w + (message[i] - 'W' + 1)*p : (message[i] - 'W' + 1)*p; prev = 9; } } cout << sum; }
Tip
단순 구현 문제로 문자열 처리만 잘해주면 쉽게 처리가 가능하다.공백은 키 입력 대기 시간이 없다는 것을 주의해야 한다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2986 - 파스칼(COCI 2007/2008) (0) | 2018.05.08 |
---|---|
백준] 3474 - 교수가 된 현우(ACM-ICPC Regionals) (0) | 2018.05.08 |
백준] 1356 - 유진수 (0) | 2018.04.23 |
백준] 2458 - 키 순서(KOI 2011 지역본선) (0) | 2018.04.22 |
백준] 14501 - 퇴사 (0) | 2018.04.21 |