728x90

0. 주어진 문제 

문제

상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.

전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 시간을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.

출력

첫째 줄에 다이얼을 걸기 위해서 필요한 시간을 출력한다.





 1. 풀이


처음에는 실행을 위해 빠르게 구현을 해보았다. 허나 for문이 반복적으로 쓰여 간단하게 수정해보았다.




 2. 소스코드

1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<string>
 
int main()
{
    char input[16];
    int count(0);
    std::cin >> input;
    std::string number[8= { "ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ" };
    for (int t = 0;input[t];t++) {
        for (int i = 0;i<8;i++) {
            for (int k = 0;k < number[i].size();k++) {
                if (number[i][k] == input[t]) {
                    count = count + 3 + i;
                }
            }
        }
    }
    std::cout << count << std::endl;
}
 
cs


2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
int main(void)
{
    int word[26= { 333444555666777888899910101010 };
 
    std::string input;
    int time = 0;
    std::cin >> input;
 
    for (int i = 0; i < input.size(); i++)
    {
        time += word[input[i] - 'A'];
    }
 
    std::cout << time << '\n';
}
 
cs


 3. 문제 출처


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


 4. 참고






'<백준> > |c++| easy' 카테고리의 다른 글

백준 2292 - 벌집  (0) 2019.02.19
백준 2941 - 크로아티아 알파벳  (0) 2019.02.18
백준 2908 - 상수  (0) 2019.02.18
백준 2675 - 문자열 반복  (0) 2019.02.16
백준 10809 - 알파벳 찾기(ascii 변환)  (0) 2019.02.10

+ Recent posts