HoonK212 GitHub_Blog

[오늘의 백준] 18번째

“5622번”

단계별로 풀어보기

  • 문자열
    • 다이얼

문제 : 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다. 상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다. 할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

입력 : 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.

출력 : 첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.


풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
	    
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String str = in.readLine();
		int len = str.length();
		
		// 주어진 알파벳에 따른 시간 계산을 위한 변수 생성
		int cnt = 0;
        
		for(int i = 0; i < len; i++) {
        
			switch(str.charAt(i)) {
			
				// 'A', 'B', 'C'가 숫자 '2'에 해당하지만, 숫자 '1'이 2초의 시간이 소요되므로 3초로 계산
				case 'A' : case 'B': case 'C' : 
					cnt += 3; 
					break;
	                
				case 'D' : case 'E': case 'F' : 
					cnt += 4; 
					break;
	                
				case 'G' : case 'H': case 'I' : 
					cnt += 5; 
					break;
	                
				case 'J' : case 'K': case 'L' : 
					cnt += 6; 
					break;
	                
				case 'M' : case 'N': case 'O' : 
					cnt += 7; 
					break;
	                
				case 'P' : case 'Q': case 'R' : case 'S' :
					cnt += 8; 
					break;
	                
				case 'T' : case 'U': case 'V' : 
					cnt += 9; 
					break;
	                
				case 'W' : case 'X': case 'Y' : case 'Z' : 
					cnt += 10; 
					break;
			}
		}		
		
		// 다이얼을 걸기 위한 최소 시간 출력
		System.out.print(cnt);
	}
}