Solution/백준

[백준/Java] 5622번: 다이얼

밈아 2022. 6. 29. 17:30
반응형

[백준] 5622번: 다이얼

 

5622번: 다이얼

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

www.acmicpc.net

이 세계에는 다양한 하드 코딩이 존재한다..

 

풀이

하드 코딩

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int sum = 0;
        int chr;

        while (true) {
            chr = System.in.read();
            if (chr == 10) break;
            switch (chr) {
                case 65:
                case 66:
                case 67:
                    sum += 3;
                    break;
                case 68:
                case 69:
                case 70:
                    sum += 4;
                    break;
                case 71:
                case 72:
                case 73:
                    sum += 5;
                    break;
                case 74:
                case 75:
                case 76:
                    sum += 6;
                    break;
                case 77:
                case 78:
                case 79:
                    sum += 7;
                    break;
                case 80:
                case 81:
                case 82:
                case 83:
                    sum += 8;
                    break;
                case 84:
                case 85:
                case 86:
                    sum += 9;
                    break;
                case 87:
                case 88:
                case 89:
                case 90:
                    sum += 10;
                    break;
                default:
                    sum += 2;
            }
        }
        bw.write(sum + "");
        bw.flush();
        bw.close();
    }
}

처음에는 enum을 사용하려고 했는데 생각처럼 동작하지 않아서 결국 하드 코딩을.

위 방법 말고도 int형 배열에 {3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10} 이런 식으로 값을 저장해서 하는 방법도 있었다. 🙄

 

그나마(?) 규칙 이용

숫자의 7번과 9번을 제외하고는 한 숫자당 알파벳 3개씩이다. 따라서 7번 전까지는 영역을 나누고(한 영역에 알파벳 3개씩), 다음 영역에 있는 알파벳일 때, 이전 영역에 저장되어 있는 숫자에서 1을 더해주면 된다. 7번 부터는 숫자를 일일이 명시해주어야 한다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int[] alpha = new int[26];
        int len = alpha.length;
        int sum = 0;
        int ch;

        for (int i = 0; i < len; ++i) {
            if (i < 15) { // 1 ~ 6
                alpha[i] = (i / 3) + 3;
            } else if (i < 19) { // 7
                alpha[i] = 8;
            } else if (i < 22) { // 8
                alpha[i] = 9;
            } else { // 9
                alpha[i] = 10;
            }
        }

        while ((ch = System.in.read()) != 10) {
            sum += alpha[ch - 65];
        }

        bw.write(sum + "");
        bw.flush();
        bw.close();
    }
}

알파벳 별로 더해야 하는 수를 저장하기 위해 int형 배열 alpha를 선언하고, for문을 통해 값을 저장한다.

2~6번째까지는 한 숫자(영역) 당 알파벳 세 개씩이므로 (i / 3) + 3 값을 저장한다.

이후 7~9까지는 각각 8, 9, 10 값을 저장해주었다.

 

입력받은 문자열에서 System.in.read()를 사용해 문자를 한 개씩 가져온다.

대문자 A 아스키코드는 65이므로 [입력받은 수 - 65]를 해주면 더해야 하는 숫자를 구할 수 있다.

 

반응형