본문 바로가기
코딩공부/백준 (java)

[백준 5622] 다이얼 (java)

by CodingKwon 2021. 7. 16.

문제 링크

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

 

5622번: 다이얼

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

www.acmicpc.net

 

나의 코드 (java)

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

public class Main {
    public static void main (String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 입력을 받음
        String s = br.readLine();
        // 문자열을 아스키로 받기 위한 배열
        int arr[] = new int[s.length()];
        // 전화를 걸기 위한 최소 시간을 저장할 변수
        int sum = 0;

        // 문자열을 A:0 부터 Z:25 까지 숫자로 저장
        for (int i=0; i<s.length(); i++){
            arr[i] = s.charAt(i) - 'A';
        }

        for (int j=0; j<arr.length; j++) {
            if (arr[j] >= 0 && arr[j] < 16) {
                // A-P까지 다이얼일 경우 전화를 걸기 위한 시간
                sum += arr[j] / 3 + 3;
            } else if (arr[j] >= 16 && arr[j] < 23) {
                // Q-W까지 다이얼일 경우 전화를 걸기 위한 시간
                sum += (arr[j] - 1) / 3 + 3;
            } else {
                // X-Z까지 다이얼일 경우 전화를 걸기 위한 시간
                sum += (arr[j] - 2) / 3 + 3;
            }
        }
        // 결과 출력
        System.out.println(sum);
    }
}

 

저는 이 문제를 접근할 때 문자열을 A-Z까지 아스키 코드로 변환 후 'A'를 빼주어 A는 0, Z는 25로 변환하여 저장합니다.

 

다이얼은 1개의 숫자에 일반적으로 알파벳이 3개지만 4개인 다이얼도 있습니다.

따라서 0~15는 A~P까지, 16~22는 Q~W까지, 23~25는 X~Z까지 범위로 나눌 수 있습니다.

 

왜냐하면 보통 한 개의 다이얼에 3개의 알파벳이기 때문에 3을 나누어 위치를 찾는 방식을 선택했기 때문입니다.

다이얼 한 개에 4개 알파벳이 있는 경우는 -1을 빼주어 3을 나누어야 합니다.

다이얼에 두 개에 4개의 알파벳이 있는 경우는 -2를 빼주어 3을 나누어야 합니다.

 

하지만 P는 15이기 때문에 -1을 뺴고 3을 나누게 되면 전화를 걸기 위한 시간이 바뀌게 됩니다. (실제는 8초 → 7초) 

W는 22이기 때문에 -2를 빼고 3을 나누게 되면 또 화를 걸기 위한 시간이 바뀌게 됩니다. (실제는 10초 → 9초)

 

따라서 0~15는 A~P까지, 16~22는 Q~W까지, 23~25는 X~Z까지 범위로 나누게 됩니다.

댓글