본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/문자열 (10)

[C++] 다이얼 : 5622번

by 17번 일개미 2022. 7. 3.
728x90

문제

 

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

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

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

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

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

 


문제 해석

 

먼저 문제를 이해하기 어려울 수도 있다.

간단하게 정리하면,

1. 다이얼 전화기는 전화번호를 한 숫자씩 입력해야한다.

2. 할머니는 전화번호 대신, 전화번호 숫자 버튼에 자세히 보면 존재하는 알파벳으로 전화를 건다.

3. 예를들면 숫자 2 의 경우는 ABC, 숫자 9의 경우는 WXYZ 이다.

4. 따라서 문자열 'U N U C I C' 는 '8 6 8 2 4 2' 이다.

5. 전화는 문자열로 걸게 되고, 각 문자에 해당하는 숫자를 구하고, 각 숫자에 걸리는 시간을 모두 더하면 된다.

6. 각 숫자 사이는 1초가 걸리고, 숫자 1 은 2초가 걸리므로, 숫자 2는 3초, 숫자 3은 4초 ... 숫자 9 는 10초가 걸린다.


풀이

#include <iostream>
#include <string>
using namespace std;

int AlphaToNumber(string alpha, int i);

int main()
{
	string dial; // 전화를 걸 문자열 입력
	int time = 0; // 걸리는 시간
	cin >> dial;

	for (int i = 0; i < dial.length(); i++) // 문자열 길이까지
	{
		time += AlphaToNumber(dial, i) + 1; // 각 문자를 숫자로 환산
	}// 걸리는 시간은 각 숫자마다 숫자에 + 1한 값
	cout << time;
}

int AlphaToNumber(string alpha, int i) // 문자 하나를 숫자로 변경
{
	int numberDial;
	if (alpha[i] >= 'A' && alpha[i] <= 'C') // A~C 사이는 2
	{
		numberDial = 2;
	}
	else if (alpha[i] >= 'D' && alpha[i] <= 'F')
	{
		numberDial = 3;
	}
	else if (alpha[i] >= 'G' && alpha[i] <= 'I')
	{
		numberDial = 4;
	}
	else if (alpha[i] >= 'J' && alpha[i] <= 'L')
	{
		numberDial = 5;
	}
	else if (alpha[i] >= 'M' && alpha[i] <= 'O')
	{
		numberDial = 6;
	}
	else if (alpha[i] >= 'P' && alpha[i] <= 'S')
	{
		numberDial = 7;
	}
	else if (alpha[i] >= 'T' && alpha[i] <= 'V')
	{
		numberDial = 8;
	}
	else if (alpha[i] >= 'W' && alpha[i] <= 'Z')
	{
		numberDial = 9;
	}
	return numberDial; // 숫자로 리턴
}

 

1. 전화를 걸 문자열을 대문자로 입력받는다.

2. 문자열에서 각 문자를 범위에 맞게 숫자로 변환해서 반환하는 함수를 작성한다.

3. 숫자가 걸리는 시간은 숫자 + 1 이므로, AlphaToNumber 함수를 호출하여 해당 숫자에 1을 더한 값을 time에 저장한다.

4. time을 출력한다.

728x90