

다이얼을 돌릴때 걸리는 총 시간을 구하는 문제이다.
1을 누를때 2초가 걸리고, 숫자가 1씩 증가할때 마다 걸리는 시간도 1씩 증가한다.
또한 주요 특징으로 A,B,C,,,,MNO 까지는 3개의 알파벳을 단위로 숫자가 정해지는데, P~Z 까지는 4개,3개, 4개 단위로 숫자가 정해진다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
int sum = 0;
int temp;
for(char c : s) {
if(c=='S' || c == 'V' || c == 'Y') c-=1;
else if(c=='Z') c-=2;
temp=(c-'A')/3+3;
sum+=temp;
}
cout << sum;
return 0;
}
우선 모두 3개의 알파벳을 기준으로 숫자가 정해진다고 생각하고, 이 조건이 성립하지않는 S, V, Y, Z 에 대해서만 아스키코드를 1또는 2를 빼주어 ~/3+3의 규칙이 항상 성립하도록 했다.
*string에 인덱스 접근시 char&로 반환한다. 나는 원본 수정이 아니라 그냥 값 확인만 하면 되므로 복사해서 저장만 하면 되었다. 그래서 char c로 받았다
#include <iostream>
using namespace std;
int main() {
int time[26] = { 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10 };
string s;
int ans = 0;
cin >> s;
for (int i = 0; i < s.length(); i++) {
ans += time[s[i] - 'A'];
}
cout << ans;
return 0;
}
위의 풀이의 경우, 알파벳이 26개이니, SIZE가 26인 배열을 만들고
으로 저장해둔다.
아마 P~Z 구간의 불규칙성 때문에 애초에 배열에 그냥 걸리는 시간 값을 넣어두는 전략을 취한듯하다.
어쨋든 나의 풀이든 다른 풀이든 char-char를 해서 몇 번째 알파벳인지를 알아내는 것이 문제의 핵심인듯하다.
이번에도 다른 사람의 풀이를 통해 새로운 관점을 익힐 수 있어서 유익했다.