본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 다이얼 (5622)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 다이얼 (5622)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 다이얼 (5622)

 


 

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

[ 문제 ]

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

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

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

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

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

[ 입력 ]

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

[ 출력 ]

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

 


[ 코드 1 ]

#include<iostream>
using namespace std;
int main() {
string a; // 문자열 입력 변수
cin >> a;
int time = 0; // 총 시간 합계 변수
for (int i = 0; a[i] != NULL; i++) {
if (a[i] == 'A' || a[i] == 'B' || a[i] == 'C')
{
time += 3;
}
else if (a[i] == 'D' || a[i] == 'E' || a[i] == 'F')
{
time += 4;
}
else if (a[i] == 'G' || a[i] == 'H' || a[i] == 'I')
{
time += 5;
}
else if (a[i] == 'J' || a[i] == 'K' || a[i] == 'L')
{
time += 6;
}
else if (a[i] == 'M' || a[i] == 'N' || a[i] == 'O')
{
time += 7;
}
else if (a[i] == 'P' || a[i] == 'Q' || a[i] == 'R' || a[i] == 'S')
{
time += 8;
}
else if (a[i] == 'T' || a[i] == 'U' || a[i] == 'V')
{
time += 9;
}
else if (a[i] == 'W' || a[i] == 'X' || a[i] == 'Y' || a[i] == 'Z')
{
time += 10;
}
}
cout << time << endl;
}

[ 코드 2 ]

#include<iostream>
using namespace std;
int main() {
string a; // 문자열 입력 변수
cin >> a;
int time[] = { 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; // 최종 값
for (int i = 0; a[i] != NULL; i++) {
result += time[a[i] - 'A'];
}
cout << result << endl;
}

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형