https://www.acmicpc.net/problem/5622
5622번: 다이얼
문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
www.acmicpc.net
문제에서 주어진 상황은 문자열로 되어있는 번호를 해석하는 것이다.
각 번호마다 해당 문자가 써있고 1번 다이얼을 누르는데 걸린 시간은 2초가 걸린다.
1보다 큰 번호들은 1씩 증가한다.(ex. 3번 다이얼은 5초, 7번 다이얼은 9초.....)
문제 꼼꼼히 안보면 틀리는 함정이 존재한다.(1번 다이얼부터 시작이 아니라 2번 다이얼부터 문자가 시작이다.)
말 그대로 구현해주면 되는 문제
좀 더 짧게 짤 수 없을까 고민하게 된다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
int sum = 0;
cin >> s;
for (unsigned int i = 0; i < s.size(); i++) {
if ('A' <= s[i] && s[i] <= 'C') { //2번 다이얼에 있는 문자들(A ~ C)
sum = sum + 3;
}
else if ('D' <= s[i] && s[i] <= 'F') { //3번 다이얼에 있는 문자들(D ~ F)
sum = sum + 4;
}
else if ('G' <= s[i] && s[i] <= 'I') { //4번 다이얼에 있는 문자들(G ~ I)
sum = sum + 5;
}
else if ('J' <= s[i] && s[i] <= 'L') { //5번 다이얼에 있는 문자들(J ~ L)
sum = sum + 6;
}
else if ('M' <= s[i] && s[i] <= 'O') { //6번 다이얼에 있는 문자들(M ~ O)
sum = sum + 7;
}
else if ('P' <= s[i] && s[i] <= 'S') { //7번 다이얼에 있는 문자들(P ~ S)
sum = sum + 8;
}
else if ('T' <= s[i] && s[i] <= 'V') { //8번 다이얼에 있는 문자들(T ~ V)
sum = sum + 9;
}
else if ('W' <= s[i] && s[i] <= 'Z') { //9번 다이얼에 있는 문자들(W ~ Z)
sum = sum + 10;
}
}
cout << sum << endl;
return 0;
}
'백준' 카테고리의 다른 글
백준9461 - 파도반 수열 (0) | 2019.06.22 |
---|---|
백준1449 - 수리공 항승 (0) | 2019.06.20 |
백준3986 - 좋은단어 (0) | 2019.06.19 |
백준2870 - 수학숙제 (0) | 2019.06.19 |
백준17213 - 과일서리 (0) | 2019.06.19 |