하루의 쉼터

[BAEKJOON] 5622. 다이얼 본문

Coding Test/BaekJoon

[BAEKJOON] 5622. 다이얼

Changun An 2021. 11. 29. 12:38
반응형

| 5622. 다이얼

Category :

String

Title :

5622. 다이얼

Question :

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

출처 : Baekjoon 

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

숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 

1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다.

즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다.

예를 들어, UNUCIC는 868242와 같다.

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

다이얼

1
2 ABC
3 DEF
4 GHI
5 JKL
6 MNO
7 PQRS
8 TUV
9 WXYZ
0 OPERATOR

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

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

Example :
예제 입력 1
WA
예제 출력 1
13
예제 입력 2
UNUCIC
예제 출력 2
36

Limited - Time
1 Sec

Limited - Space 
128 MB

Code :

cl_solution.hpp

#include<iostream>
#include<vector>
#include<string>
class cl_soltuion{
private :
	std::vector<int> dial_num;
public :

	int fn_run(std::string user_data);
};

cl_solution.cpp

#include "cl_soltuion.hpp"
int cl_soltuion::fn_run(std::string user_data)
{
	int lp_split = 0 , sum=0, lp=0;
	while (lp_split < user_data.length()) {
		dial_num.push_back(user_data.at(lp_split));
		lp_split++;
	}
	while (lp < dial_num.size()) {
		int temp =dial_num[lp]-65;
		if (temp >= 0 && temp <= 2)
			sum += 3;
		else if (temp >= 3 && temp <= 5)
			sum += 4;
		else if(temp >=6 && temp <=8)
			sum += 5;
		else if (temp >= 9 && temp <= 11)
			sum += 6;
		else if (temp >= 12 && temp <= 14)
			sum += 7;
		else if (temp >= 15 && temp <= 18)
			sum += 8;
		else if (temp >=19 && temp <= 21)
			sum += 9;
		else if (temp >= 22 && temp <= 25)
			sum += 10;
		lp++;
	}

    return sum;
}

main.cpp

#include"cl_soltuion.hpp"

int main() {
	cl_soltuion sol;
	std::string user_data;
	std::cin >> user_data;
	if (user_data.length() >= 2 && user_data.length() <= 15) {
		std::cout<<sol.fn_run(user_data);
	}

	return 0;
}

* Point :

다이얼 1이 포함되므로 다이얼 2는 숫자 3을 가지게 된다.

cl_solution 코드 분석

int lp_split = 0 , sum=0, lp=0;
	while (lp_split < user_data.length()) {
		dial_num.push_back(user_data.at(lp_split));
		lp_split++;
	}

사용자가 입력한 데이터를 제어하기 쉽게 분리해주는 작업이다.

while (lp < dial_num.size()) {
		int temp =dial_num[lp]-65;
		if (temp >= 0 && temp <= 2)
			sum += 3;
		else if (temp >= 3 && temp <= 5)
			sum += 4;
		else if(temp >=6 && temp <=8)
			sum += 5;
		else if (temp >= 9 && temp <= 11)
			sum += 6;
		else if (temp >= 12 && temp <= 14)
			sum += 7;
		else if (temp >= 15 && temp <= 18)
			sum += 8;
		else if (temp >=19 && temp <= 21)
			sum += 9;
		else if (temp >= 22 && temp <= 25)
			sum += 10;
		lp++;
	}

if문을 통하여 다이얼+1 만큼 sum에 더해준다.

Reuslt :

Baekjoon :

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

 

5622번: 다이얼

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

www.acmicpc.net

Github :

https://github.com/Anchangun/BaekJoon/tree/main/Question/String/5622.%20%EB%8B%A4%EC%9D%B4%EC%96%BC

 

GitHub - Anchangun/BaekJoon

Contribute to Anchangun/BaekJoon development by creating an account on GitHub.

github.com

반응형

'Coding Test > BaekJoon' 카테고리의 다른 글

[BAEKJOON] 1000. A+B - C++  (0) 2022.01.06
[BAEKJOON] 10172. 개  (0) 2022.01.06
[BAEKJOON] 10171. 고양이  (0) 2021.11.27
[BAEKJOON] 10718. We love kriii  (0) 2021.11.26
[BAEKJOON] 2557. Hello World  (0) 2021.11.25
Comments