본문 바로가기
프로그래밍 ( Programming )/백준 알고리즘 (BaekJoon Algorithm)

5622번 - 다이얼 ( 백준 알고리즘/C++ )

by Jayce_choi 2020. 12. 19.
반응형
 

5622번: 다이얼

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

www.acmicpc.net

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

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

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

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

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

입력 : 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 

단어는 2글자~15글자로 이루어져 있다.

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


#include<iostream>
#include<string>
using namespace std;
int main()
{
	string Arr;
	int Num[] = {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 };
	int result = 0;
	getline(cin, Arr);
	
	for (int i = 0;Arr[i]!='\0';i++)
	{
		result += Num[Arr[i] - 'A'];
	}
	cout << result;

	return 0;
}
중요 포인트 

- 각 숫자에 해당되는 알파벳 그룹에 대해서 입력된 배열 값이 어떤 그룹에 속하는지 판별하는 알고리즘이 중요하다.

 

해설

- 이번 문제는 입력된 대문자에서 각각의 자리에 있는 대문자 알파벳을 어떤 그룹에 속하는지를 판별하고 해당 그룹의 숫자에 +1을 한 시간을 합치는 연산이 진행되어야 한다.

저 같은 경우는 미리 숫자를 적어둔 행렬을 만들어 두었습니다. 각각의 숫자에 알파벳 3개씩만 들어가도 일정하게 구성할 수 있었겠지만 몇 개의 숫자에 알파벳 4개가 포함되어서 꽤나 불규칙 적이었습니다. 때문에 각 자리의 알파벳에 'A'를 뺄셈함으로써 int 값을 얻고 해당되는 Num 배열의 index로 입력되어 result에 누적시키는 방법으로 진행하였습니다.

때문에 다른 분 같은 경우 If문으로 경우에 따라서 깔끔하게 분류되도록 코드를 작성하신 분도 계셨으며 좀 더 짧게 작성하신 분도 계셨는데 저도 꾸준히 한번 연습하도록 하겠습니다.

감사합니다 혹시 궁금하신점 있으시다면 댓글 부탁드리겠습니다!! 

반응형

댓글