PS/BOJ

백준 2037 문자메시지 / JAVA

얍연구소장 2023. 4. 11. 16:32

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

2037번: 문자메시지

첫째 줄에 p와 w가 주어진다. (1 ≤ p, w ≤ 1,000) p는 버튼을 한번 누르는데 걸리는 시간이고, w는 AC와 같은, 같은 숫자인 문자를 연속으로 찍기 위해 기다리는 시간을 의미한다. 그리고 둘째 줄에는

www.acmicpc.net


>풀이


import java.util.*;
import java.io.*;

public class Main {
    
    static char[][] ph = {
        {},
        {},{'A','B','C'},{'D','E','F'},
        {'G','H','I'},{'J','K','L'},{'M','N','O'},
        {'P','Q','R','S'},{'T','U','V'},{'W','X','Y','Z'}
    };
    static int result = 0;
    static int btnNum = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int p = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        char[] arr = br.readLine().toCharArray();
        for(char alphabet : arr) {
             if(alphabet == ' ') {
                 result += p;
                 btnNum = 1;
             } else {
                 chk(alphabet, p, w);
             }
        }
        System.out.println(result);
    }
    
    public static void chk(char alphabet, int p, int w) {
        for(int i = 2; i < ph.length; i++) {
            int sec = 0;
            for(int j = 0; j < ph[i].length; j++) {
                sec += p;
                if(btnNum == i) {
                    sec += w;
                    btnNum = 0;
                }
                
                if(alphabet == ph[i][j]) {
                    result += sec;
                    btnNum = i;
                    return;
                }
            }
        }
    }
}