메뚜기 재석이는 간만에 목초지에서 신났당. 무지무지 신났당. 너무너무 신나서 뛰어놀다가 그만!! 핸드폰을 물웅덩이에 빠뜨리고 말았다. 그 덕에 핸드폰은 젖어버렸고, 자판은 요상하게 작동한다. 자판의 키 중 하나를 누르면, 마치 다른 키를 누른 것처럼 동작한다. 다행히도, 두 키가 같은 동작을 하지는 않기 때문에 재석이는 모든 문자를 입력할 수 있다.
재석이는 자판을 눌러보면서 어떤 키가 어떤 동작을 하는지를 모두 알아냈다. 이제 문자를 보내려는데, 재석이는 메뚜기라서 누군가의 도움이 필요할 것 같다.
이 그림은 핸드폰의 자판이다(안타깝게도 재석이는 메뚜기라 스마트폰을 사지 못 했다.). 예를 들어, a를 입력하고 싶으면 2를 한 번 누르면 되고, b를 입력하고 싶으면 2를 두 번 누르면 된다. 만약 똑같은 키를 연속해서 눌러 다른 문자를 입력하고 싶으면 #을 누르면 된다. 예를 들어, klor을 입력하고 싶으면 55#555666777을 눌러 입력하면 된다.
입력
첫째 줄엔 9개의 정수가 주어진다. 첫 번째 정수는 1번 키를 누르면 원래 자판에서 어떤 키를 누른 것처럼 동작하는지, 두 번째 정수는 2번 키를 누르면 원래 자판에서 어떤 키를 누른 것처럼 동작하는지...이런 식이다.
재석이는 *이랑 0은 쓸 수가 없다. #키는 망가지지 않았다.
두 번째 줄엔 소문자로 된 문자열이 주어진다. 길이는 100 문자를 넘지 않는다.
알고리즘을 떠올리는 것 까지는 그렇게 오래 걸리지 않았지만, 구현에서 범위지정이나
배열 처리 같은거에서 조~~~금 시간 걸림 아주 조금. 재밌는 문제였다.
#include <iostream>
#include <string>
using namespace std;
int checknum(char c)
{
if(c=='a'||c=='b'||c=='c')
{
return 2;
}
else if(c=='d'||c=='e'||c=='f')
{
return 3;
}
else if(c=='g'||c=='h'||c=='i')
{
return 4;
}
else if(c=='j'||c=='k'||c=='l')
{
return 5;
}else if(c=='m'||c=='n'||c=='o')
{
return 6;
}
else if(c=='p'||c=='q'||c=='r'||c=='s')
{
return 7;
}
else if(c=='t'||c=='u'||c=='v')
{
return 8;
}
else if(c=='w'||c=='x'||c=='y'||c=='z')
{
return 9;
}
}
int checkrepeat(char c)
{
if(c=='a'||c=='d'||c=='g'||c=='j'||c=='m'||c=='p'||c=='t'||c=='w')
{
return 1;
}
else if(c=='b'||c=='e'||c=='h'||c=='k'||c=='n'||c=='q'||c=='u'||c=='x')
{
return 2;
}
else if(c=='c'||c=='f'||c=='i'||c=='l'||c=='o'||c=='r'||c=='v'||c=='y')
{
return 3;
}
else if(c=='s'||c=='z')
{
return 4;
}
}
int main(void)
{
int arr[9];
string str;
for(int i=0; i<9; i++)
cin>>arr[i];
cin>>str;
int len= str.size();
int k[len];
for(int i=0; i<len; i++)
for(int j=0; j<9; j++)
{
if(arr[j]==checknum(str[i])){
k[i]=j+1;
}
}
for(int i=0; i {
for(int j=0; j<checkrepeat(str[i]); j++)
{
cout<<k[i];
}
if(k[i]==k[i+1]){
cout<<'#';
}
}
}
'Algorithm' 카테고리의 다른 글
백준 16397 탈출 (0) | 2019.07.09 |
---|---|
백준 1260번 DFS와 BFS (0) | 2019.07.05 |
백준 5622번 다이얼 (0) | 2019.07.03 |
백준 2562번 최대값 (0) | 2019.07.02 |
백준 1100번 하얀칸 (0) | 2019.07.01 |