Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 오늘도 우라라 공략
- install opencv-4.4.0 on ubuntu 22.04
- 마리아 DB
- mariaDB
- 그랑사가
- 반복문
- 등차수열
- 오늘도 우라라 펫 공략
- JungOl
- 우분투
- 오늘도 우라라 펫
- ubuntu
- publish
- ros
- MSG
- LeetCode
- 오늘도 우라라
- C++
- C언어
- 토픽
- Subscribe
- 데이터 베이스
- 환경설정
- 기초
- mysql
- topic
- Linux
- while
- 리눅스
- 프로그래밍
Archives
- Today
- Total
하루의 쉼터
[BAEKJOON] 5622. 다이얼 본문
반응형
| 5622. 다이얼
Category :
String
Title :
5622. 다이얼
Question :
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다.
숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 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
Github :
https://github.com/Anchangun/BaekJoon/tree/main/Question/String/5622.%20%EB%8B%A4%EC%9D%B4%EC%96%BC
반응형
'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