이번엔 좀 재미난 문제입니다 :)
영어로 된 문자자판에서 문자 메시지를 보내는 데 걸리는 시간을 측정하는 소스를 짜는 것인데요.
https://www.acmicpc.net/problem/2037
문제 설명이 좀 어려운데, 아마도 풀이결과를 보고 유추하는 문제인듯 합니다.
하지만 크레이가 좀 더 풀어서 설명드리겠습니다 :)
다음과 같은 제약이 있습니다.
A 를 입력하려면 2키를 1번
B 를 입력하려면 2키를 2번
C 를 입력하려면 2키를 3번 눌러야 합니다.
그리고 바로 전과 동일한 숫자판의 영어를 이어서 입력할 때는 기다려야 합니다.
이를테면 2번 키를 눌러 A 를 바로 전에 입력했다면,
다음 A 또는 B 또는 C 를 입력하려면 일정시간 기다려야 합니다.
하지만 A를 입력했다가 D를 입력할 때는 기다릴 필요가 없습니다.
D키는 3숫자판에 있으니까요.
그리고 번호판을 한번 누를때마다 시간이 소요됩니다.
p 와 w 가 처음에 주어지는데요.
p 는 press 의 약어, w 는 wait의 약어로 의미를 둔 듯 합니다.
p 가 2초 걸리고, w가 10초 걸린다고 할 때,
ABCDE 를 입력한다면, 아래와 같은 시간이 소요됩니다.
A - 2초
B - 10초 기다리고 + 2초 x 2 = 14초
C - 10 초 기다리고 + 2초 x 3 = 16초
D - 2초
E - 10초 기다리고 + 2초 x 2 = 14초
총 소요시간 : 48초입니다.
다만 띄어쓰기는 무조건 2초입니다.
이를테면 A와 C 를 띄어쓰면 C 를 입력할 때 대기시간이 없습니다.
A - 2초
띄어쓰기 - 2초
C - 2초 x 3
백준 사이트에서 예제로 주어진 것도 각 버튼의 누름 시간에는 아래와 같은 시간이 소요됩니다.
A - 2초
B - 10초대기 + 2초 x 2 = 14초
B - 10초대기 + 2초 x 2 = 14초
A - 10초대기 + 2초 = 12초
S - 2초 x 4 = 8초
띄어쓰기 - 2초
S - 2초 x 4 = 8초
A - 2초
L - 2초 x 3 = 6초
A - 2초
M - 2초
총 72초가 되는 것이지요
이 과정을 시뮬레이션하는 것입니다.
문제 이해가 좀 더 수월해졌으리라 생각되며,
이 상태에서 한번 도전해보실분 도전해보세요 :)
소스 공개합니다 ~
#include <iostream>
#include <cstring>
void Result()
{
int p, w;
scanf("%d %d\n", &p, &w);
char s[1001];
scanf("%[^\n]s", s);
int size=strlen(s);
char number[26]={
2, 2, 2, // ABC
3, 3, 3, // DEF
4, 4, 4, // GHI
5, 5, 5, // JKL
6, 6, 6, // MNO
7, 7, 7, 7, // PQRS
8, 8, 8, // TUV
9, 9, 9, 9 // WXYZ
};
char press[26]={
1, 2, 3, // ABC
1, 2, 3, // DEF
1, 2, 3, // GHI
1, 2, 3, // JKL
1, 2, 3, // MNO
1, 2, 3, 4, // PQRS
1, 2, 3, // TUV
1, 2, 3, 4 // WXYZ
};
long time=0;
for(int i=0;i<size;++i)
{
// 대기시간 계산
if(i>0 && isalpha(s[i]) && isalpha(s[i-1]))
if(number[s[i]-'A']==number[s[i-1]-'A'])
time+=w;
// 누르는 시간 계산
if(isalpha(s[i]))time+=press[s[i]-'A']*p;
else time+=p;
}
printf("%ld", time);
}
int main()
{
Result();
getchar(); getchar();
}
'코딩과 알고리즘' 카테고리의 다른 글
영문장 깜박이 프로그램 업데이트 0.2베타 (1) | 2019.08.04 |
---|---|
백준 알고리즘 7576 토마토 문제풀이 해설과 소스 (4) | 2019.06.23 |
백준 알고리즘 10989. 수 정렬하기 3 (0) | 2019.06.23 |
백준알고리즘 11399. ATM 해설과 소스 (0) | 2019.06.23 |
백준 1788. 피보나치 수열 확장 (4) | 2019.06.22 |