문제 : www.acmicpc.net/problem/5622
<풀이>
#include <iostream>
using namespace std;
//A는 65 Z는 90
int main()
{
string input;
cin >> input;
int time = 0;
for (int i = 0; i < input.size(); i++)
{
time += 2;
time += (((int)input[i] - 65) / 3) + 1;
if (input[i] == 'Z' || input[i] == 'V' || input[i] == 'S' || input[i] == 'Y') time--;
}
cout << time << endl;
return 0;
}
<어떻게 풀었는가>
A=65, Z=90이라는 것과 알파벳이 3 단위로 나뉜다는 것을 이용하여
(아스키코드값-65)/3 +1 이것이 숫자 1에서 해당 위치로 갈 때 걸리는 시간이라는 것을 알았다.
숫자를 누를 때마다 처음 위치로 돌아가므로 매번 +2를 해주고 거기다가 +((아스키코드값-65)/3 +1)을 해준다
여기서 함정이 있는데, ABC/DEF/‥‥이렇게 3 단위로 나뉘다가 PQRS/TUV/WXYZ 이렇게 4 단위로 나뉜다.
나도 이거 때문에 한 번 틀렸다.
이건 값이 추가적으로 더해지는 알파벳(V,S,Y,Z)이 입력값에 있을 경우 -1을 해주는 식으로 해결했다.
'백준 > C++' 카테고리의 다른 글
[백준/C++] 2869번 달팽이는 올라가고 싶다 (0) | 2020.11.08 |
---|---|
[백준/C++] 2922번 벌집 (0) | 2020.11.07 |
[백준/C++] 1316번 그룹 단어 체커 (0) | 2020.11.07 |
[백준/C++] 2941번 크로아티아 알파벳 (0) | 2020.11.07 |
[백준/C++] 1193번 분수찾기 (0) | 2020.11.04 |
댓글