[알고리즘/자바] 백준 5622번 - 다이얼

2021. 7. 14. 21:39개발/알고리즘

 

 

5622번: 다이얼

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

www.acmicpc.net

 

전화기의 번호를 누르기 위해선 몇초간 기다리는 시간이 필요하며, 각 번호에는 3~4개 알파벳이 매핑 되어있다. 

입력은 번호가 아닌 알파벳으로 주어지며 이 알파벳을 보고 전화를 거는데 걸리는 시간을 구하는 문제다.

 

첫번째 아이디어.

문제에 각 알파벳을 선택하는데 소요되는 시간은 이미 확정 되어있다. A,B,C는 3초가 소요되며 D,E,F를 선택할때는 4초가 걸린다.

아스키 코드

아스키 코드를 통해 문자를 10진수 정수로 변환했고 아래와 같은 방법으로 알파벳을 선택하는데 걸린 시간을 구했다.

이런식으로 풀면 정답일줄 알았는데 한가지 실수가 있었다. (위에 형광펜으로 칠한곳)숫자에 알파벳 3개가 할당되어 있다고 봤는데 문제의 그림을 보면 알파벳이 4개가 할당된 숫자가 있었다. (다이얼 7과 9 ) 위 로직대로 구현하면 S가 입력으로 들어올때 9초가 소요된다고 나온다.

 

 

 

 

따라서 다른 방법을 사용했다. 

 

그냥 알파벳별로 걸리는 시간을 배열에 작성했다. time[0]은 A를 선택하는데 걸리는 시간, time[1]은 B를 선택하는데 걸리는 시간이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        // 입력
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String dial = bf.readLine(); //String
        
        // 알파벳은 26개
        int [] time = new int[]{3,3,3,          //ABC
                                4,4,4,          //DEF
                                5,5,5,          //GHI
                                6,6,6,          //JKL
                                7,7,7,          //MNO
                                8,8,8,8,       //PQRS
                                9,9,9,          //TUV
                                10,10,10,10}; //WXYZ
        
 
        int result = 0;
         for(int i=0; i<dial.length(); i++) {
            
            // 문자를 10진수로 표현
            int ch = dial.charAt(i);
            int alpha = ch-65// A와 거리가 얼마나 떨어져있는가?
            result += time[alpha];
            
        }
        
        bw.write(String.valueOf(result));
        bw.flush();//남아있는 데이터를 모두 출력시킴
        bw.close();//스트림을 닫음
    }
 
}
cs