[알고리즘/자바] 백준 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 |
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘/자바] 백준 1316번 - 그룹 단어 체커 (0) | 2021.07.27 |
---|---|
[알고리즘/자바] 백준 2941번 - 크로아티아 알파벳 (0) | 2021.07.26 |
[C++]비트마스크를 이용한 에라토스테네스의 체 구현 (0) | 2021.07.11 |
[알고리즘/자바] 백준 2164번 - 카드2 (0) | 2021.05.28 |
[알고리즘/자바] 백준 9252번 - LCS 2 (2) | 2021.01.28 |