티스토리 뷰

728x90
반응형

 

백준 온라인 저지(BOJ) 5662번 다이얼

https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

아래 그림과 같은 다이얼로 전화를 걸 때 걸리는 최소 시간을 출력 (숫자 1은 2초, 2는 3초, ...)

단, 전화번호는 숫자 아래 적인 알파벳 중 하나로 주어짐

 

2. 풀이

입력받은 char 문자를 ASCII 코드값을 활용해서 숫자로 변경해줍니다.

(각 문자에서 'A' 를 빼서 'A' 는 0으로, 'B' 는 1로, 'C' 는 2로, ...)

 

변경된 숫자는 일부 알파벳을 제외하고는 3 씩 반복되므로 나누기 3을 해서 처리하면 됩니다.

* 0(A), 1(B), 2(C) 는 나누기 3 하면 0

* 3(D), 4(E), 5(F) 는 나누기 3 하면 1

 

이렇게 계산된 숫자에 3 을 더해주면 다이얼 까지 걸리는 시간을 구할 수 있습니다.

 

문제는 7 이 PQRS 로 4개라서 이후 문자들이 꼬인다는 점 입니다.

이는 간단하게 하드 코딩으로 1을 빼주는 방식으로 구현했습니다.

(위 규칙에 따라 S 는 숫자 8인 것으로 처리되므로 1을 빼서 7로 변경)

 

3. 코드

#include <stdio.h>

int main() {
	char a[16];
	scanf("%s", &a);

	int ret = 0;

	int i = 0;
	while (a[i]) {
		ret += (a[i] - 'A') / 3 + 3;
		if (a[i] == 'S' || a[i] == 'V' || a[i] == 'Y' || a[i] == 'Z') ret -= 1;
		++i;
	}

	printf("%d\n", ret);

	return 0;
}
728x90
반응형
댓글