본문 바로가기
백준/C++

[백준/C++] 5622번 다이얼

by 뷕뺙쀡 2020. 11. 7.

문제 : 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을 해주는 식으로 해결했다.

댓글